[R] Using apply to get group means

Domenico Vistocco vistocco at unicas.it
Tue Mar 31 18:44:19 CEST 2009


A different solution (using aggregate for the table of means and merge 
for  adding it to the dataframe):

x1<-rep(c("A","B","C"),3)
x2<-c(rep(1,3),rep(2,3),1,2,1)
x3<-c(1,2,3,4,5,6,2,6,4)
x<-data.frame(x1,x2,x3) #here using data.frame the x1 variable is directly converted to factor


x3means <- aggregate(x$x3, by=list(x$x1), FUN="mean")
merge(x, x3means, by.x="x1", by.y="Group.1")


Ciao,
domenico

Alan Cohen wrote:
> Hi all,
>
> I'm trying to improve my R skills and make my programming more efficient and succinct.  I can solve the following question, but wonder if there's a better way to do it:
>
> I'm trying to calculate mean by several variables and then put this back into the original data set as a new variable.  For example, if I were measuring weight, I might want to have each individual's weight, and also the group mean by, say, race, sex, and geographic region.  The following code works:
>
>   
>> x1<-rep(c("A","B","C"),3)
>> x2<-c(rep(1,3),rep(2,3),1,2,1)
>> x3<-c(1,2,3,4,5,6,2,6,4)
>> x<-as.data.frame(cbind(x1,x2,x3))
>> x3.mean<-rep(0,nrow(x))
>> for (i in 1:nrow(x)){
>>     
> +   x3.mean[i]<-mean(as.numeric(x[,3][x[,1]==x[,1][i]&x[,2]==x[,2][i]]))
> +   }                                      
>   
>> cbind(x,x3.mean)
>>     
>   x1 x2 x3 x3.mean
> 1  A  1  1     1.5
> 2  B  1  2     2.0
> 3  C  1  3     3.5
> 4  A  2  4     4.0
> 5  B  2  5     5.5
> 6  C  2  6     6.0
> 7  A  1  2     1.5
> 8  B  2  6     5.5
> 9  C  1  4     3.5
>
> However, I'd love to be able to do this with "apply" rather than a for-loop.  Or is there a built-in function? Any suggestions?
>
> Also, any way to avoid the hassles with having to convert to a data frame and then again to numeric when one variable is character?
>
> Cheers,
> Alan Cohen
>
> ______________________________________________
> 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