【问题标题】:Applying a function to all columns of a data.table together with a group-by将函数与分组依据一起应用于 data.table 的所有列
【发布时间】:2016-02-25 04:45:16
【问题描述】:

我有一个包含大量行的data.table。我想按一个特定的列对数据表进行分组,并且我想将相同的聚合函数应用于所有其他列。这样做的适当方法是什么?

这里是一些示例代码,用于设置与我所拥有的数据表相似的数据表。

my.table.tmp <- matrix(runif(5000*95), nrow=5000)
my.table <- data.table(my.table.tmp)
my.table[, gbc:=rep(c('A', 'B', 'C', 'D', 'E'), 1000)]

我想按因子列 gbc 对表进行分组,并且我希望所有剩余的 95 列都应该由一个函数聚合,比如说 mean

我看到了

my.table[, lapply(.SD, mean), by=gbc]

给了我一张尺寸正确的表格,但我不确定这是否正确。如果它做正确的事情,有人可以通过分解这里发生的事情来帮助我吗?

【问题讨论】:

  • 我认为按照您的描述是正确的。它正在计算my.table 中除gbc 之外的每一列的mean - 由.SD 表示,按gbc 分组。
  • .SD 在这里做什么?特别是,lapply(.SD, myfunction) 将每个子集列视为列表的一个元素,然后将myfunction 应用于该列表元素作为输入?
  • 是的,没错。 .SD 只是每个组的所有子集列,并且由于 data.frame/data.table 只是作为列粘在一起的 listlapply 将循环应用 myfunction 的每一列

标签: r group-by data.table


【解决方案1】:

您的描述听起来正确.SD 只是每个by= 组的所有子集列,并且由于data.frame/data.table 只是作为列粘在一起的listlapply 将循环应用每个列myfunction

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多