折叠data.table中的行

Big*_*hao 6 r data.table

我有一个包含1M行和2列的data.table

虚拟数据:

require(data.table)
ID <- c(1,2,3)
variable <- c("a,b","a,c","c,d")
dt <- data.table(ID,variable)
dt
> dt
Run Code Online (Sandbox Code Playgroud)
ID variable
1      a,b
2      a,c
3      c,d

现在我想通过"ID"将列"variable"折叠成不同的行,就像reshape2中的"melt"函数或data.table中的melt.data.table一样.

这就是我想要的:

ID variable
1  a
1  b
2  a
2  c
3  c
3  d 

PS:鉴于预期的结果,我知道如何做相反的步骤.

dt2 <- data.table(ID = c(1,1,2,2,3,3), variable = c("a","b","a","c","c","d"))
dt3 <- dt2[, list(variables = paste(variable, collapse = ",")), by = ID]
Run Code Online (Sandbox Code Playgroud)

任何提示或建议?

Aru*_*run 5

由于strsplit是矢量化,这将是一个耗时的操作,我会避免在每个组使用它.相反,可以首先拆分,整个列,然后重建data.table如下:

var = strsplit(dt$variable, ",", fixed=TRUE)
len = vapply(var, length, 0L)
ans = data.table(ID=rep(dt$ID, len), variable=unlist(var))

#    ID variable
# 1:  1        a
# 2:  1        b
# 3:  2        a
# 4:  2        c
# 5:  3        c
# 6:  3        d
Run Code Online (Sandbox Code Playgroud)