【问题标题】:Merge duplicate for various factor and calculate mean合并各种因子的重复项并计算平均值
【发布时间】:2013-03-07 00:48:19
【问题描述】:

我有一个带有 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 列的平均值以获得合并深度。 有什么提示吗?提前非常感谢。

【问题讨论】:

  • +1 第一个问题写得这么清楚,并包含一个可重现的例子!欢迎来到 SO。

标签: r merge duplicates plyr


【解决方案1】:

您必须以与 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) ....
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多