合并多个因素的重复值并计算平均值。

3

我有一个数据集,其中包含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列的平均值。有什么提示吗?非常感谢。

对于这样一个清晰明了的第一个问题,以及包含可重现示例的做法,我给你点赞!欢迎来到SO。 - Josh O'Brien
2个回答

2

您需要像Depth一样为XY值添加计算和名称。

 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

谢谢,我很感激。我试图将计算作为函数(x)放入... - Yoann_R

2
一个 data.table 的替代品。这比 ddply 更快,也可以处理大数据。 而且打字更少!
  library(data.table)
  DT <- data.table(df)
  DT[, lapply(.SD, mean) ,by = list(Profile, Depth)]

注意

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接