【发布时间】:2015-02-20 10:01:56
【问题描述】:
我担心可能是一个简单的问题,我几乎有解决方案(确实,我确实有解决方案,但它很笨拙)。
我有一个数据框如下:
name replicate value
A 1 0.9
A 2 1
B 1 0.8
B 2 0.81
C 1 0.7
C 2 0.9
我想做的是通过“名称”计算“值”的平均值,并将结果附加到新列,如下所示:
name replicate value meanbyname
A 1 0.9 0.95
A 2 1 0.95
B 1 0.8 0.805
B 2 0.81 0.805
C 1 0.7 0.8
C 2 0.9 0.8
我可以通过以下任何一种方式计算均值:
a<-aggregate(value~name, data=test, FUN=function(x) c(mean=mean(x),count=length(x)))
b<-aggregate(test$value~test$name, FUN=mean)
c<-tapply(test$value, test$name, mean)
但我无法轻松地将它们附加到数据框中,因为它们的长度错误。
然后我可以这样做:
test$meanbyname<-rep(c, each=2)
这似乎很接近,因为对象“a”似乎只有两列宽:
test$meanbyname<-rep(a$value.mean, each=a$value.count)
我想要一种自动化流程的方法,例如,如果存在 name=A 的三个副本且 name=B 只有一个副本,它将起作用。是否有更通用的单线解决方案?
提前感谢大家的帮助。
【问题讨论】: