[R] Using apply to get group means

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


Sorry, there was a mistake in the previous mail:

Domenico Vistocco wrote:
> 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")
#I forgot the second variable in the by argument (both for aggregate and 
by):
x3means <- aggregate(x$x3, by=list(x$x1, x$x2), FUN="mean")
merge(x, x3means, by.x=c("x1","x2"), by.y=c("Group.1", "Group.2"))

>
>
> 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.
>>
>>
>
> ______________________________________________
> 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