r - 粘贴两个 data.table 列

标签 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

现在我想粘贴“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 = ":"))]

旧版本

您可以使用 .SDby处理多列:
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/

相关文章:

r - 仅在没有重复项的 ID 字段上进行子集化(寻找比 for 循环更快的东西)

r - 如何在 R 中找到某个观察结果最后一次出现后的日期?

javascript - 将数据从js发送到R Shiny变量

R 为什么 dplyr 按组计算唯一值 (n_distinct) 的速度比 data.table (uniqueN) 更快?

r - 在聚合时按最近的前一个日期合并两个数据帧

r - R 中的长到宽多个变量

r - 使用 mutate_at 在每列之后插入相对值(相对于 tibble 的第二列)

linux - 我在哪里可以获得 R 版本 2.15.2 的 'httr'

r - 使用 data.table 而不是 data.frame 进行子集化

r - 使用 data.table 按组对对应于最大值的行进行子集化