我想对时间序列中的组执行一些汇总统计。这是我所拥有的
test = data.table(ind=c(1:8), val = c(0,0,1,1,1,0,0,1))
ind val
1: 1 0
2: 2 0
3: 3 1
4: 4 1
5: 5 1
6: 6 0
7: 7 0
8: 8 1
如何创建第三列作为我的组索引?像这样 -
ind val group_id
1: 1 0 1
2: 2 0 1
3: 3 1 2
4: 4 1 2
5: 5 1 2
6: 6 0 3
7: 7 0 3
8: 8 1 4
我对有效的解决方案感兴趣(因为现实生活中的桌子相当大(,并希望避免直接for loop
data.table::rleid
是专门为此类工作而设计的。它生成运行长度类型 ID,如 ?rleid
中所述。
在这种情况下,您可以尝试:
test[, group_id := rleid(val)]