[R] apply function within different groups

arun smartpink111 at yahoo.com
Thu May 23 19:01:22 CEST 2013


Hi,
No problem.
Try:

dat2<-within(dat1,f_myvar<-ave(myvar,group,FUN=mifunc))
 dat2
#   group var1 var2 myvar f_myvar
#1 group1    1    a   100      NA
#2 group2    2    b   200     299
#3 group2   34    c   300     300
#4 group3    5    d   400     499
#5 group3    6    e   500     500
#6 group4    7    f   600      NA
A.K.


________________________________
From: Estefanía Gómez Galimberti <tefagg at yahoo.com>
To: arun <smartpink111 at yahoo.com> 
Cc: R help <r-help at r-project.org> 
Sent: Thursday, May 23, 2013 12:08 PM
Subject: Re: [R] apply function within different groups



Thanks a lot!!! It works perkectly!
Just one thing, is there a way to preserve my original data frame so i don´t need to join both tables? I could do it with rbind but my original data frame is not in order, so....
Thanks again!


________________________________
From: arun <smartpink111 at yahoo.com>
To: Estefanía Gómez Galimberti <tefagg at yahoo.com> 
Cc: R help <r-help at r-project.org> 
Sent: Thursday, May 23, 2013 12:48 PM
Subject: Re: [R] apply function within different groups


Hi,

May be this helps:
dat1<- read.table(text="
group var1 var2 myvar
group1 1 a 100
group2 2 b 200
group2 34 c 300
group3 5 d 400
group3 6 e 500
group4 7 f 600
",sep="",header=TRUE,stringsAsFactors=FALSE)

library(plyr)
ddply(dat1,.(group),summarize, f_myvar=mifunc(myvar)) 
#   group f_myvar
#1 group1      NA
#2
group2     299
#3 group2     300
#4 group3     499
#5 group3     500
#6 group4      NA
A.K.



----- Original Message -----
From: Estefanía Gómez Galimberti <tefagg at yahoo.com>
To: r help help <r-help at r-project.org>
Cc: 
Sent: Thursday, May 23, 2013 11:30 AM
Subject: [R] apply function within different groups



Hi,

I have a very big data frame and I would like to apply a function to one of the columns within different groups  and obtain another dataframe
My data frame is like this:

group var1 var2 myvar 
group1 1 a 100 
group2 2 b 200 
group2 34 c 300 
group3 5 d 400 
group3 6 e 500 
group4 7 f
600 

and I woud like to apply this function to column myvar: 

mifunc = function(vec) {
vec=as.vector(vec)
for (i in 1:(length(vec)-1)){
vec[i]=vec[i+1]-1
}
return(vec)
}
by the groups in column group. I would like to obtain the same dataframe but with f(myvar) instead of myvar.

How can I do this?

Thanks, 
Estefania
    [[alternative HTML version deleted]]

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible
code.



More information about the R-help mailing list