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
我试图在 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