【发布时间】: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只是作为列粘在一起的list,lapply将循环应用myfunction的每一列
标签: r group-by data.table