代码之家  ›  专栏  ›  技术社区  ›  cliu

根据R中连续几天的顺序分配ID

  •  0
  • cliu  · 技术社区  · 2 年前

    我有一个重复测量的数据集,我想用它来分配ID。重复测量是从连续几天的序列中得出的。然而,序列本身可能是不平衡的(例如,一些人的天数更多,而另一些人的天数更少,一些人从第1天开始,但一些人可能从第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
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   akrun    2 年前

    拿到 diff 相邻元素之间的差异,并检查是否小于0,取累积和

    days$id <- cumsum(c(TRUE, diff(days$day)  < 0))