根据 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))