.SD和.SDcols用于data.table连接中的i表达式

时间:2017-04-06 14:09:28

标签: r join data.table

我正在尝试根据连接将列的子集从Y复制到X,其中列的子集是动态的

我可以非常轻松地识别列:names(Y)[grep("xxx", names(Y))] 但是当我尝试在j表达式中使用该代码时,它只给出了列名,而不是列的值。 .SD.SDcols非常接近,但它们仅适用于x expression。我正在尝试做这样的事情:

X[Y[names(Y)[grep("xxx", names(Y))] := .SD, .SDcols = names(Y)[grep("xxx", names(Y)), on=.(zzz)]

是否有一组适用于.SD的{​​{1}}和.SDcols构造?或者,我是否需要为i expressionj expression字符串构建字符串?

1 个答案:

答案 0 :(得分:3)

也许这会帮助您入门:

library(data.table)
X <- as.data.table(mtcars[1:5], keep.rownames = "id")
Y <- as.data.table(mtcars, keep.rownames = "id")
cols <- c("gear", "carb")

# copy cols from Y to X based on common "id":
X[Y, (cols) := mget(cols), on = "id"]

正如弗兰克在评论中指出的那样,使用i.为列名添加前缀可能更安全,以确保指定的列确实来自Y

X[Y, (cols) := mget(paste0("i.", cols)), on = "id"]