【发布时间】:2020-01-03 01:23:00
【问题描述】:
我有一个大的 data.table ~ 18*10^6 行,其中填充了列 ID 和 CLASS,我想创建一个新的二进制列,通过 ID 指示新 CLASS 值的出现。
DT <- data.table::data.table(ID=c("1","1","1","2","2"),
CLASS=c("a","a","b","c","b"))
### Starting
ID CLASS
1 a
1 a
1 b
2 c
2 b
### Desired
ID CLASS NEWCLS
1 a 1
1 a 0
1 b 1
2 c 1
2 b 1
我最初初始化 NEWCLS 变量并使用 data.table::shift() 函数将 ID 和 CLASS 滞后 1
DT[,NEWCLS:=0]
DT[,NEWCLS:=data.table::shift(NEWCLS, n = 1L, fill = 1, type = "lag"),by=.(ID,CLASS)]
这会创建所需的输出,但是对于 ~18*10^6 行,它需要相当长的时间,即使对于 data.table 也是如此。
有人知道如何仅使用 data.table 参数以更快、更有效的方式创建 NEWCLS 变量吗?
【问题讨论】:
标签: r data.table lag shift