我有一个带有'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