【发布时间】:2017-05-25 08:27:49
【问题描述】:
我想对时间序列中的组执行一些汇总统计。这是我所拥有的
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:test[, group_id := rleid(val)]。 -
@mt1022 您介意将其发布为回复吗?我已经使用 data.table 多年,但不知道这个相当新的“便利”功能
-
@RInatM,当然。我最初认为这很简单,应该是一个重复。许多答案使用
rleid。但是我还没有找到合适的。
标签: r loops data.table