data.table:识别 data.table 中递增的连续序列

data.table: Identify increasing contiguous sequence in data.table

我试图在 data.table 的列中识别一个连续的递增序列,并为每个唯一的连续序列分组分配一个标识符,但我很难想出一个矢量化的方法来快速识别这些序列。

我环顾四周,没有发现任何仅使用 data.table 语法和命令以矢量化方式执行此操作的东西,也许这是不可能的。

library(data.table)

DT <- data.table(ID=c(1,1,1,1),time=c(17,18,74,75),exposure=c(0,1,1,1))

我的数据是这样的:

   ID time exposure
1:  1   17        0
2:  1   18        1
3:  1   74        1
4:  1   75        1

我想创建一个新列来指示 time 的哪些行是连续递增序列,如下所示:

   ID time exposure contiguous.groups
1:  1   17        0                x1
2:  1   18        1                x1
3:  1   74        1                x2
4:  1   75        1                x2

如果有人以前这样做过或知道如何开始,将不胜感激您的帮助。

我们可以取'time'的相邻元素的diff来创建一个逻辑向量,得到累加和

DT[, contiguous.groups := paste0("x", cumsum(c(TRUE, diff(time) != 1)))]
DT
#   ID time exposure contiguous.groups
#1:  1   17        0                x1
#2:  1   18        1                x1
#3:  1   74        1                x2
#4:  1   75        1                x2