通过 data.table 中的运行来识别和分组

data.table 包提供了一种按数据运行分组的便捷方法。请考虑以下示例数据:

library(data.table)
(DT <- data.table(x = c(1, 1, 2, 2, 2, 1), y = 1:6))
#    x y
# 1: 1 1
# 2: 1 2
# 3: 2 3
# 4: 2 4
# 5: 2 5
# 6: 1 6

变量 x 有三个运行:长度为 2 且值为 1 的运行,长度为 3 且值为 2 的运行,以及长度为 1 且值为 1 的运行。我们可能希望计算每个变量 y 的平均值。变量 x 的运行(这些平均值是 1.5,4 和 6)。

data.table rleid 函数提供了一个 id,表示向量的每个元素的运行 id:

rleid(DT$x)
# [1] 1 1 2 2 2 3

然后,可以轻松地对此运行 ID 进行分组并汇总 y 数据:

DT[,mean(y),by=.(x, rleid(x))]
#    x rleid  V1
# 1: 1     1 1.5
# 2: 2     2 4.0
# 3: 1     3 6.0