【问题标题】:Using aggregate to get the mean of duplicate rows in a data.frame in r使用聚合来获取 r 中 data.frame 中重复行的平均值
【发布时间】:2016-05-10 23:32:52
【问题描述】:

我有一个矩阵 B,它是 10 行 x 2 列:

B = matrix(c(1:20), nrow=10, ncol=2) 

有些行是技术上的重复,它们对应的是相同的 长度为 20 的列表 (list1) 中的数字。

list1 = c(1,1,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,8,8)
list1 = as.list(list1)

我想使用这个列表 (list1) 来取 B 中所有列的任何重复值的平均值,这样我最终得到一个包含 8 行和 2 列的矩阵或 data.frame(所有重复平均)。

这是我的代码:

aggregate.data.frame(B, by=list1, FUN=mean)

它会产生这个错误:

Error in aggregate.data.frame(B, by = list1, FUN = mean) : 
  arguments must have same length

我做错了什么?

谢谢!

【问题讨论】:

  • 我很困惑,你想取出重复的,然后取它们的平均值吗?

标签: r aggregate


【解决方案1】:

您的数据有 2 个变量(2 列),每个变量有 10 个观察值(10 行)。函数aggregate.data.frame 期望列表中的元素与变量中的观察数具有相同的长度。您收到错误消息,因为列表中的向量有 20 个值,而每个变量只有 10 个观察值。因此,例如,您可以这样做,因为现在您有 1 个包含 20 个观察值的变量,而列表 1 有一个包含 20 个元素的向量。

B <- 1:20
list1 <- list(B=c(1,1,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,8,8)) 
aggregate.data.frame(B, by=list1, FUN=mean)

如果你给它一个 2 列和 20 行的矩阵,代码也可以工作。

aggregate.data.frame(cbind(B,B), by=list1, FUN=mean)

我认为这个答案解决了您收到错误的原因。但是,我不确定它是否解决了您实际尝试做的事情。您如何期望最终得到 8 行和 2 列?该矩阵中的单元格究竟代表什么?

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 2021-02-01
    • 2022-06-23
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多