我有一个“时间”列,并想根据“时间”的值生成一个列“ ID”。在首次出现时间= 0时,ID应该= 1。然后,ID应该保持= 1,直到遇到下一个时间= 0为止;那么ID将增加1。
新的数据集如下所示:
时间ID
0 1
1 1
2 1
0 2
1 2
这是示例数据帧。我有时间列,需要一个新的ID列。
structure(list(row = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
93, 94, 95, 96, 97, 98, 99, 100), time = c(0, 1, 2, 3, 4, 0,
1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1,
2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0,
1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1,
2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2,
3, 4, 0, 1, 2, 3, 0, 1, 2, 3)), class = "data.frame", row.names = c(NA,
-100L))
谢谢。
答案 0 :(得分:0)
最简单的解决方案是使用cumsum
计算出现在时间列中的0,然后将其放入ID列:
data$id<-cumsum(data$time==0)
row time id
1 1 0 1
2 2 1 1
3 3 2 1
4 4 3 1
5 5 4 1
6 6 0 2
7 7 1 2
8 8 2 2
9 9 3 2
10 10 4 2
11 11 0 3
12 12 1 3
13 13 2 3
14 14 3 3
15 15 4 3
16 16 0 4
17 17 1 4
18 18 2 4
19 19 3 4
20 20 4 4
21 21 0 5
22 22 1 5
23 23 2 5
24 24 3 5
25 25 4 5
26 26 0 6
27 27 1 6
28 28 2 6
29 29 3 6
30 30 4 6
31 31 0 7
32 32 1 7
33 33 2 7
34 34 3 7
35 35 4 7
36 36 0 8
37 37 1 8
38 38 0 9
39 39 1 9
40 40 2 9
41 41 3 9
42 42 4 9
43 43 0 10
44 44 1 10
45 45 2 10
46 46 3 10
47 47 4 10
48 48 0 11
49 49 1 11
50 50 2 11
51 51 3 11
52 52 4 11
53 53 0 12
54 54 1 12
55 55 2 12
56 56 3 12
57 57 4 12
58 58 0 13
59 59 1 13
60 60 2 13
61 61 3 13
62 62 4 13
63 63 0 14
64 64 1 14
65 65 2 14
66 66 3 14
67 67 4 14
68 68 0 15
69 69 1 15
70 70 2 15
71 71 3 15
72 72 4 15
73 73 0 16
74 74 1 16
75 75 2 16
76 76 3 16
77 77 4 16
78 78 0 17
79 79 1 17
80 80 2 17
81 81 3 17
82 82 4 17
83 83 0 18
84 84 1 18
85 85 2 18
86 86 3 18
87 87 4 18
88 88 0 19
89 89 1 19
90 90 2 19
91 91 3 19
92 92 4 19
93 93 0 20
94 94 1 20
95 95 2 20
96 96 3 20
97 97 0 21
98 98 1 21
99 99 2 21
100 100 3 21