beg*_*neR 11 r data.table
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
Run Code Online (Sandbox Code Playgroud)
现在我想粘贴"A"和"B"列来获得一个新的,我们称之为"新":
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
Run Code Online (Sandbox Code Playgroud)
dnl*_*rky 15
我有一个类似的问题,但有很多列,并不想手动键入它们.
(根据@mnel的评论)
dt[, new:=do.call(paste0,.SD), .SDcols=-1]
Run Code Online (Sandbox Code Playgroud)
这大约是旧版本的两倍,并且似乎回避了这个怪癖.请注意.SDcols
用于标识要使用的列paste0
.该-1
应用中的所有列,但首先,由于OP要粘贴列A和B,但没有L.
如果您想使用其他分隔符:
dt[ , new := do.call(paste, c(.SD, sep = ":"))]
Run Code Online (Sandbox Code Playgroud)
您可以使用.SD
和by
处理多个列:
dt[,new:=paste0(.SD,collapse=""),by=seq_along(L)]
Run Code Online (Sandbox Code Playgroud)
我添加seq_along
以防L不是唯一的.(你可以用它来检查dt<-data.table(L=c(1:4,4),A=letters[7:11],B=letters[12:16])
).
另外,在我的实际例子中由于某种原因我不得不t(.SD)
在paste0
部分中使用.可能还有其他类似的怪癖.
beg*_*neR 13
Arun的评论回答了这个问题:
dt[,new:=paste0(A,B)]
Run Code Online (Sandbox Code Playgroud)