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