合并各种因素的重复并计算平均值

时间:2013-03-18 15:45:28

标签: r merge duplicates plyr

我有一个地理参考的数据集,其中包含X,Y配置文件编号和相关深度:

Dataset
X = c(1:10)
Y=c(11:20)
Profile=c(298,298,298,299,299,299,300,300,301,301)
Depth=c(-1,-1,-2,-1,-2,-3,-1,-1,-1,-2)
df=as.data.frame(cbind(X,Y,Profile,Depth))

我的数据集如下所示:

        X  Y Profile Depth
1   1 11     298    -1
2   2 12     298    -1
3   3 13     298    -2
4   4 14     299    -1
5   5 15     299    -2
6   6 16     299    -3
7   7 17     300    -1
8   8 18     300    -1
9   9 19     301    -1
10 10 20     301    -2

我要做的是在每个配置文件中合并深度重复项,计算合并后的副本的X和Y的平均值,并保持配置文件编号关联。

我可以使用包plyr:

将配置文件合并到配置文件中
out=ddply(df,.(Profile,Depth),summarize, Depth=unique(Depth))

  Profile Depth
1     298    -2
2     298    -1
3     299    -3
4     299    -2
5     299    -1
6     300    -1
7     301    -2
8     301    -1

但我找不到一种方法来提取合并深度的X和Y列的平均值。 任何提示?非常感谢。

2 个答案:

答案 0 :(得分:2)

您必须以与X相同的方式为Y取消Depth值添加计算和名称。

 ddply(df,.(Profile,Depth),summarize, X=mean(X),Y=mean(Y), Depth=unique(Depth))
  Profile    X    Y Depth
1     298  3.0 13.0    -2
2     298  1.5 11.5    -1
3     299  6.0 16.0    -3
4     299  5.0 15.0    -2
5     299  4.0 14.0    -1
6     300  7.5 17.5    -1
7     301 10.0 20.0    -2
8     301  9.0 19.0    -1

答案 1 :(得分:2)

data.table替代方案。这将比ddply更快,并且它将针对大数据进行扩展。 打字也少了!

  library(data.table)
  DT <- data.table(df)
  DT[, lapply(.SD, mean) ,by = list(Profile, Depth)]

注意

  • .SD是每个组的data.table的子集
  • lapply(.SD, mean)将计算.SD
  • 中每列的平均值
  • 如果您只想要列的一部分,则可以将其传递给.SDcols