R通过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.tablerleid函数提供一个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