r - R中重复行之间的平均值

标签 r duplicates aggregate mean

我有一个数据框 df具有重复的名称列但不重复值列的行:

name    value   etc1    etc2
A       9       1       X
A       10      1       X
A       11      1       X
B       2       1       Y
C       40      1       Y
C       50      1       Y

我需要将重复的名称聚合为一行,同时计算值列的平均值。预期输出如下:
name    value   etc1    etc2
A       10      1       X
B       2       1       Y
C       45      1       Y

我曾尝试使用 df[duplicated(df$name),]但当然这并没有给我重复的意思。我想用 aggregate() ,但问题是此函数的 FUN 部分也将适用于所有其他列,并且除其他问题外,它无法计算字符内容。由于所有其他列在“重复项”上具有相同的内容,因此我需要将它们聚合为就像名称列一样。任何提示...?

最佳答案

这里有一个 data.table解决方案。该解决方案是通用的,即使对于具有 60 列的 data.frame 也适用。由于我按值不同的所有变量对数据进行分组(参见我如何在下面创建键)

library(data.table)
dat <- read.table(text='name    value   etc1    etc2
A       9       1       X
A       10      1       X
A       11      1       X
B       2       1       Y
C       40      1       Y
C       50      1       Y',header=TRUE)
keys <- colnames(dat)[!grepl('value',colnames(dat))]
X <- as.data.table(dat)
X[,list(mm= mean(value)),keys]
  name etc1 etc2 mm
1:    A    1    X 10
2:    B    1    Y  2
3:    C    1    Y 45

编辑 扩展到多个值变量

如果您有多个数值变量要计算均值,例如,如果您的数据如下所示
  name value etc1 etc2     value1
1    A     9    1    X  2.1763485
2    A    10    1    X -0.7954326
3    A    11    1    X -0.5839844
4    B     2    1    Y -0.5188709
5    C    40    1    Y -0.8300233
6    C    50    1    Y -0.7787496

上面的解决方案可以这样扩展:
X[,lapply(.SD,mean),keys]
   name etc1 etc2 value     value1
1:    A    1    X    10  0.2656438
2:    B    1    Y     2 -0.5188709
3:    C    1    Y    45 -0.8043865

这将计算键列表中不存在的所有变量的平均值。

关于r - R中重复行之间的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17383635/

相关文章:

mysql - 删除 NiFi 中的重复项

r - aggregate + mean 返回错误的结果

r - mfrow(r 中的多个图形)

r - 添加脚注/感谢 Rmarkdown 标题幻灯片

file - 用于从文件中删除重复条目的 Shell 脚本

r - SQLite 中是否有产品运算符(或解决方法)?

algorithm - 分组相似集算法

r - ggplotly 创建的对象在放大时不会动态调整网格线

r - 捕获验证码图像

javascript - 防止重复插入文档