我遇到了类似的问题,但有很多列,并且不想手动键入它们。
新版本
(基于@mnel 的评论)
dt[, new:=do.call(paste0,.SD), .SDcols=-1]
这大约是旧版本的两倍,并且似乎避免了一些怪癖。注意使用.SDcols
识别要使用的列paste0
. The -1
使用除第一列之外的所有列,因为 OP 想要粘贴 A 列和 B 列,但不粘贴 L 列。
如果您想使用不同的分隔符:
dt[ , new := do.call(paste, c(.SD, sep = ":"))]
旧版
您可以使用.SD
and by
处理多列:
dt[,new:=paste0(.SD,collapse=""),by=seq_along(L)]
I added seq_along
以防 L 不唯一。 (您可以使用以下命令检查这一点dt<-data.table(L=c(1:4,4),A=letters[7:11],B=letters[12:16])
).
另外,在我的实际实例中,由于某种原因我不得不使用t(.SD)
in the paste0
部分。可能还有其他类似的怪癖。