dt <- data.table(L=1:5,A=letters[7:11],B=letters[12:16])
L A B
1: 1 g l
2: 2 h m
3: 3 i n
4: 4 j o
5: 5 k p
现在我想粘贴“A”和“B”列来获得一个新的,我们称之为"new":
dt2
L A B new
1: 1 g l gl
2: 2 h m hm
3: 3 i n in
4: 4 j o jo
5: 5 k p kp
最佳答案
我有一个类似的问题,但有很多列,并且不想手动输入它们。
新版本
(基于@mnel 的评论)
dt[, new:=do.call(paste0,.SD), .SDcols=-1]
这大约是旧版本的两倍,并且似乎回避了这些怪癖。注意使用
.SDcols
标识要在 paste0
中使用的列. -1
使用除第一列之外的所有列,因为 OP 想要粘贴 A 列和 B 列而不是 L 列。如果您想使用不同的分隔符:
dt[ , new := do.call(paste, c(.SD, sep = ":"))]
旧版本
您可以使用
.SD
和 by
处理多列:dt[,new:=paste0(.SD,collapse=""),by=seq_along(L)]
我加了
seq_along
如果 L 不是唯一的。 (您可以使用 dt<-data.table(L=c(1:4,4),A=letters[7:11],B=letters[12:16])
进行检查)。此外,在我的实际实例中,出于某种原因,我不得不使用
t(.SD)
在 paste0
部分。可能还有其他类似的怪癖。
关于r - 粘贴两个 data.table 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18359456/