我有一个地理参考的数据集,其中包含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列的平均值。 任何提示?非常感谢。
答案 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