转换数据框并按组计算平均值

时间:2016-05-09 22:04:16

标签: r dataframe mean

我有一个这样的数据框:

user_id

我想转变成这个:

ID  A  V
1   M  4
1   D  6
1   M  10
2   D  3
2   D  7

基本上,我想按组计算平均值。我用过"聚合"和" plyr"包装但没有成功。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您要执行的操作实际上需要几个步骤:

1:IDA分组并计算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。)