定义一个索引,每次在r数据表中的某一列中找到相同值时该索引增加

问题描述 投票:0回答:1

我有一个如下所示的数据表:

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 中有一个解决方案,但也欢迎任何适用的解决方案!

r data.table
1个回答
0
投票

你可以这样做:

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
© www.soinside.com 2019 - 2024. All rights reserved.