data.table使用新名称连接(多个)所选列

时间:2015-11-18 16:49:09

标签: r join data.table

我喜欢加入两个具有相同列(名称和值)的表,而其他表则不是。我只想加入那些不相同的东西,我想为它们确定一个新名称。我目前这样做的方式似乎很简单,很难处理我有100多列的真实表,即我想确定要提前加入的列而不是连接语句。可重复的例子:

# create table 1
DT1 = data.table(id = 1:5, x=letters[1:5], a=11:15, b=21:25)
# create table 2 with changed values for a, b via pre-determined cols
DT2 = copy(DT1)
cols <- c("a", "b")
DT2[, (cols) := lapply(.SD, function(x) x*2), .SDcols = cols]

# this both works but is verbose for many columns
DT1[DT2, c("a_new", "b_new") := list(i.a, i.b), on=c(id="id")]
DT1[DT2, `:=` (a_new=i.a, b_new=i.b), on = c(id="id")]

我在考虑这样的事情(不起作用):

cols_new <- c("a_new", "b_new")
cols <- c("a", "b")
DT1[DT2, cols_new := i.cols, on=c(id="id")]

1 个答案:

答案 0 :(得分:3)

根据Arun的建议更新了答案:

cols_old <- c('i.a', 'i.b')
DT1[DT2, (cols_new) := mget(cols_old), on = c(id = "id")]

你也可以通过以下方式生成cols_old

paste0('i.', gsub('_new', '', cols_new, fixed = TRUE))

查看旧答案的历史记录。