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

Transforming a data frame and calculate the mean by group

我有这样一个数据框:

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

我想转换成这个:

ID M D V
1  7 6 10
2    5 5

基本上,我想按组计算平均值。我使用了 "aggregate" 和 "plyr" 包但没有成功。

提前谢谢你。

如果我没理解错的话,你要执行的操作其实需要几个步骤:

1:IDA 分组并计算 V.

的均值

2: 获取步骤 1 的结果并将其从长格式重塑为宽格式,这样原始列 A 中的每个组在结果 data.frame.

3: 分别按 ID 分组并计算 V.

的均值

4:ID 步骤 2 和 3 的结果合并为一个 data.frame.

这可以通过多次调用 aggregate(), a call to reshape() on the first aggregation result, and finally a call to 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

(我认为您在输入预期输出时犯了一个错误;组 ID=1V 的平均值是 6.666667,而不是 10。)