我有一个这样的数据框:
user_id
我想转变成这个:
ID A V
1 M 4
1 D 6
1 M 10
2 D 3
2 D 7
基本上,我想按组计算平均值。我用过"聚合"和" plyr"包装但没有成功。
提前谢谢。
答案 0 :(得分:2)
如果我理解正确,您要执行的操作实际上需要几个步骤:
1:按ID
和A
分组并计算V
的均值。
2:获取第1步的结果并将其从长格式转换为宽格式,以便原始列A
中的每个组在结果data.frame中都有自己的列。
3:另外,只按ID
分组并计算V
的均值。
4:将ID
步骤2和3的结果合并到一个data.frame中。
这可以通过拨打aggregate()
几次,第一次聚合结果调用reshape()
,最后调用merge()
来完成:
df <- data.frame(ID=c(1L,1L,1L,2L,2L),A=c('M','D','M','D','D'),V=c(4L,6L,10L,3L,7L),stringsAsFactors=F);
merge(reshape(aggregate(V~ID+A,df,mean),dir='w',idvar='ID',timevar='A'),aggregate(V~ID,df,mean));
## ID V.D V.M V
## 1 1 6 7 6.666667
## 2 2 5 NA 5.000000
(我认为在输入预期输出时你犯了一个错误;组V
的{{1}}的平均值是6.666667,而不是10。)