我有一个如下所示的数据表:
example <- data.table(time = 1:30,
A = c(rep("a", 5), rep("b", 5), rep("a", 5),
rep("b", 2), rep("a", 8), rep("b", 3), rep("a", 2)))
我需要一种方法来根据 A 列分配递增索引,以便输出如下所示:
time A B
1 a 1
2 a 1
3 a 1
4 a 1
5 a 1
6 b 1
7 b 1
8 b 1
9 b 1
10 b 1
11 a 2
12 a 2
13 a 2
14 a 2
15 a 2
16 b 2
17 b 2
18 a 3
19 a 3
20 a 3
21 a 3
22 a 3
23 a 3
24 a 3
25 a 3
26 b 3
27 b 3
28 b 3
29 a 4
30 a 4
我找不到任何简单的方法来做到这一点。我很高兴在 data.table 中有一个解决方案,但也欢迎任何适用的解决方案!
你可以这样做:
example$B <- cumsum(c(example$A[1] == 'a', diff(example$A == 'a') == 1))
结果:
example
time A B
1: 1 a 1
2: 2 a 1
3: 3 a 1
4: 4 a 1
5: 5 a 1
6: 6 b 1
7: 7 b 1
8: 8 b 1
9: 9 b 1
10: 10 b 1
11: 11 a 2
12: 12 a 2
13: 13 a 2
14: 14 a 2
15: 15 a 2
16: 16 b 2
17: 17 b 2
18: 18 a 3
19: 19 a 3
20: 20 a 3
21: 21 a 3
22: 22 a 3
23: 23 a 3
24: 24 a 3
25: 25 a 3
26: 26 b 3
27: 27 b 3
28: 28 b 3
29: 29 a 4
30: 30 a 4
time A B