该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