使用 data.table 对列进行计数和聚合/汇总

Posted

技术标签:

【中文标题】使用 data.table 对列进行计数和聚合/汇总【英文标题】:Use data.table to count and aggregate / summarize a column 【发布时间】:2015-12-25 21:26:43 【问题描述】:

我想对data.table 中的一列进行计数和汇总(求和),但找不到最有效的方法。这似乎接近我想要的R summarizing multiple columns with data.table。

我的数据:

set.seed(321)
dat <- data.table(MNTH = c(rep(201501,4), rep(201502,3), rep(201503,5), rep(201504,4)), 
                  VAR = sample(c(0,1), 16, replace=T))

> dat
     MNTH VAR
 1: 201501   1
 2: 201501   1
 3: 201501   0
 4: 201501   0
 5: 201502   0
 6: 201502   0
 7: 201502   0
 8: 201503   0
 9: 201503   0
10: 201503   1
11: 201503   1
12: 201503   0
13: 201504   1
14: 201504   0
15: 201504   1
16: 201504   0

我想使用 data.table 计算 VARMNTH 的总和。期望的结果:

    MNTH COUNT VAR
1 201501     4   2
2 201502     3   0
3 201503     5   2
4 201504     4   2

【问题讨论】:

我发现 the accepted answer 这个问题即使在 SINGLE 列的情况下也比这个问题中的 accepted answer on the question linked 更容易理解。 我认为这是因为另一个问题指向了多列的情况。 【参考方案1】:

您所指的帖子提供了一种有关如何将一种聚合方法应用于多个列的方法。如果你想对不同的列应用不同的聚合方法,你可以这样做:

dat[, .(count = .N, var = sum(VAR)), by = MNTH]

这会导致:

     MNTH count var
1: 201501     4   2
2: 201502     3   0
3: 201503     5   2
4: 201504     4   2

您还可以通过引用更新数据集来将这些值添加到现有数据集:

dat[, `:=` (count = .N, var = sum(VAR)), by = MNTH]

这会导致:

> dat
      MNTH VAR count var
 1: 201501   1     4   2
 2: 201501   1     4   2
 3: 201501   0     4   2
 4: 201501   0     4   2
 5: 201502   0     3   0
 6: 201502   0     3   0
 7: 201502   0     3   0
 8: 201503   0     5   2
 9: 201503   0     5   2
10: 201503   1     5   2
11: 201503   1     5   2
12: 201503   0     5   2
13: 201504   1     4   2
14: 201504   0     4   2
15: 201504   1     4   2
16: 201504   0     4   2

如需进一步了解如何使用 data.table 语法,请参阅 GitHub wiki 上的 Getting started guides

【讨论】:

以上是关于使用 data.table 对列进行计数和聚合/汇总的主要内容,如果未能解决你的问题,请参考以下文章

pandas-对列中具有相同值的连续行进行分组和聚合

对列中的预订状态进行划分和计数

使用 .SD 时 R data.table 聚合缓慢

根据scala中的条件对列进行火花数据框聚合

如何在熊猫中按值计数对列进行排序

根据data.table中列的最大值自定义dcast内部的聚合函数?