通过 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