2016-05-09 52 views
0

计算平均我有这样一个数据帧:转换一个数据帧,并通过

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 

基本上,我要计算的平均分组。我已经使用“聚合”和“plyr”包但没有成功。

预先感谢您。

+0

您真的应该详细阐述一下您的预期产出。 –

+0

结果中的“V”列是什么? –

+0

是ID的均值。但值应该是6.666667,而不是10. – klo

回答

2

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

1:集团双方IDA和计算V的手段。

2:取步骤1的结果和从长重塑它宽格式,使得从原始列A每个组具有在所得data.frame自己的列。

3:另外,组由ID和计算手段V

4:合并ID将步骤2和3的结果合并到单个数据帧中。

这可以用几个电话到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 

(我想你打字的时候犯了一个错误您的预期产出;组ID=1V的平均值是6.666667,而不是10.)

+1

谢谢你,你读了我的想法:) – klo