【问题标题】:Aggregate multiple columns according to some others根据其他一些聚合多个列
【发布时间】:2015-09-16 09:48:02
【问题描述】:

在 data.frame 中有数据,我想聚合一些列(使用任何通用函数)按其他一些列分组,保持其余列不变(甚至省略它们)。时尚是在SQL 中调用group by 函数。作为一个例子,让我们假设我们有

df <- data.frame(a=rnorm(4), b=rnorm(4), c=c("A", "B", "C", "A"))

我想对a 列中的值求和(例如)并平均(例如)b 列中的值,按c 列中的符号分组。我知道可以使用applycbind 或类似方法来实现这样的目标,指定您要使用的功能,但我想知道是否有更智能的(单行)方式(尤其是使用aggregate 功能) 这样做。

【问题讨论】:

标签: r aggregate


【解决方案1】:

抱歉,我不明白处理多个列会使事情变得复杂。

library(data.table)
dt <- data.table(df)
dt[,.(sum_a = sum(a),mean_b= mean(b)),by = c]

【讨论】:

  • 如果我想按多个列c 分组怎么办?正确的语法应该是什么?
  • df
【解决方案2】:

喜欢这样吗?

    mapply(Vectorize(function(x, y) aggregate(
      df[, x], by=list(df[, 3]), FUN=y), SIMPLIFY = F), 
      1:2, c('sum', 'mean'))

【讨论】:

  • 这给了我:[,1] [,2] Group.1 factor,3 factor,3 x Numeric,3 Numeric,3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 2019-10-07
相关资源
最近更新 更多