📜  如何在 R 中聚合 Data.table 中的多列?(1)

📅  最后修改于: 2023-12-03 15:38:25.056000             🧑  作者: Mango

如何在 R 中聚合 Data.table 中的多列?

在 R 中使用 Data.table 聚合数据时,我们经常会遇到需要按照多列进行聚合的情况。本文将介绍如何在 Data.table 中聚合多列数据。

准备工作

我们首先需要加载 Data.table 包,并生成一个示例数据集。这里我们生成一个包含 idgroupvalue 三列的数据集:

library(data.table)

# 生成示例数据
set.seed(123)
dt <- data.table(id = rep(1:3, 3), 
                 group = rep(letters[1:3], each = 3), 
                 value = round(runif(9), 2))

生成的数据集如下所示:

> dt
   id group value
1:  1     a  0.29
2:  2     a  0.79
3:  3     a  0.36
4:  1     b  0.82
5:  2     b  0.55
6:  3     b  0.71
7:  1     c  0.06
8:  2     c  0.28
9:  3     c  0.89
按单列聚合

首先,我们可以先介绍如何按单列聚合。假设我们想要按照 group 列进行聚合,并计算每个组中的平均值:

# 按照 group 列聚合,计算平均值
dt[, .(mean_value = mean(value)), by = group]

执行代码后,得到以下结果:

   group mean_value
1:     a  0.4800000
2:     b  0.6933333
3:     c  0.4100000

这里的 by 参数指定了按照哪一列进行聚合。.(mean_value = mean(value)) 指定了计算平均值,并将结果存储在一个名为 mean_value 的列中。

按多列聚合

接下来,我们介绍如何按多列进行聚合。假设我们想要按照 idgroup 两列进行聚合,并计算每组的总和与平均值:

# 按照 id 和 group 列聚合,计算总和和平均值
dt[, .(sum_value = sum(value), mean_value = mean(value)), by = .(id, group)]

执行代码后,得到以下结果:

   id group sum_value mean_value
1:  1     a      0.29  0.2900000
2:  2     a      0.79  0.7900000
3:  3     a      0.36  0.3600000
4:  1     b      0.82  0.8200000
5:  2     b      0.55  0.5500000
6:  3     b      0.71  0.7100000
7:  1     c      0.06  0.0600000
8:  2     c      0.28  0.2800000
9:  3     c      0.89  0.8900000

这里的 by 参数将两列进行了组合。我们同时计算了每组的总和和平均值,结果存储在 sum_valuemean_value 两列中。

由于本文只是简单介绍,这里并没有对 Data.table 的所有聚合操作做详细介绍,读者可以参考 Data.table 的官方文档来了解更多的操作方式。