根据 R 中连续几天的序列分配 ID
Assign ID based on a sequence of consecutive days in R
我有一个包含重复测量的数据集,我想用它来分配 ID。重复测量来自连续几天的序列。然而,序列本身可能是不平衡的(例如,有些人的天数较多,而另一些人的天数较少,有些人从第一天开始,而其他一些人可能从第 2 天或第 3 天开始)。我的问题是如何在同一序列块内创建和分配相同的 ID。这是一个玩具数据集:
days <- data.frame(
day = c(1L,2L,3L,4L,5L,6L,8L,9L,10L,
2L,3L,4L,5L,6L,7L,9L,10L,
1L,2L,4L,5L,6L,8L,9L,10L,
1L,2L,3L,4L,5L,6L,7L,8L,9L,10L)
)
这是我期望的最终结果:
id day
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
6 1 6
7 1 8
8 1 9
9 1 10
10 2 2
11 2 3
12 2 4
13 2 5
14 2 6
15 2 7
16 2 9
17 2 10
18 3 1
19 3 2
20 3 4
21 3 5
22 3 6
23 3 8
24 3 9
25 3 10
26 4 1
27 4 2
28 4 3
29 4 4
30 4 5
31 4 6
32 4 7
33 4 8
34 4 9
35 4 10
获取相邻元素之间的diff
误差,如果小于0,则求和
days$id <- cumsum(c(TRUE, diff(days$day) < 0))
我有一个包含重复测量的数据集,我想用它来分配 ID。重复测量来自连续几天的序列。然而,序列本身可能是不平衡的(例如,有些人的天数较多,而另一些人的天数较少,有些人从第一天开始,而其他一些人可能从第 2 天或第 3 天开始)。我的问题是如何在同一序列块内创建和分配相同的 ID。这是一个玩具数据集:
days <- data.frame(
day = c(1L,2L,3L,4L,5L,6L,8L,9L,10L,
2L,3L,4L,5L,6L,7L,9L,10L,
1L,2L,4L,5L,6L,8L,9L,10L,
1L,2L,3L,4L,5L,6L,7L,8L,9L,10L)
)
这是我期望的最终结果:
id day
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
6 1 6
7 1 8
8 1 9
9 1 10
10 2 2
11 2 3
12 2 4
13 2 5
14 2 6
15 2 7
16 2 9
17 2 10
18 3 1
19 3 2
20 3 4
21 3 5
22 3 6
23 3 8
24 3 9
25 3 10
26 4 1
27 4 2
28 4 3
29 4 4
30 4 5
31 4 6
32 4 7
33 4 8
34 4 9
35 4 10
获取相邻元素之间的diff
误差,如果小于0,则求和
days$id <- cumsum(c(TRUE, diff(days$day) < 0))