在R数据表中,如何识别可变长度的行块?



我有一个带有'status'列的大型数据表。状态可以是0、1或2。0或多个状态为0或2的行可以位于状态为1的行之前。例如

dt <- data.table(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), status = c(1, 0, 1, 0, 2, 1, 0, 0, 0, 1))

我想要识别组1 (id = 1), 2 (id = 2:3), 3 (id = 4:6)和4 (id = 7:10)。是否有更有效的方法来实现这一点,而不是通过循环运行?

请告诉我。谢谢!

library(data.table)
dt <- data.table(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), status = c(1, 0, 1, 0, 2, 1, 0, 0, 0, 1))
dt[,.(group=rleid(rev(cumsum(rev(status==1)))), id, status)]
#>     group id status
#>  1:     1  1      1
#>  2:     2  2      0
#>  3:     2  3      1
#>  4:     3  4      0
#>  5:     3  5      2
#>  6:     3  6      1
#>  7:     4  7      0
#>  8:     4  8      0
#>  9:     4  9      0
#> 10:     4 10      1

创建于2022-11-23与reprex v2.0.2

最新更新