R data.table join中i表达式的.SD和.SDcols

R data.table join中i表达式的.SD和.SDcols,r,join,data.table,R,Join,Data.table,我试图基于联接将列的子集从Y复制到X,其中列的子集是动态的 我可以很容易地识别列:names(Y)[grep(“xxx”,names(Y))] 但是当我尝试在j表达式中使用该代码时,它只给出了列名,而不是列的值。.SD和.SDcols非常接近,但它们只适用于x表达式。我正在尝试这样做: X[Y[names(Y)[grep(“xxx”,names(Y))]:=.SD,.SDcols=names(Y)[grep(“xxx”,names(Y)),on=(zzz)] 是否有一组等效的.SD和.SDcol

我试图基于联接将列的子集从Y复制到X,其中列的子集是动态的

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

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


是否有一组等效的
.SD
.SDcols
构造应用于
i表达式
?或者,我是否需要为
j表达式
eval
该字符串建立一个字符串?

也许这将帮助您开始:

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"]

请提供一个小的可重复的例子BTW
grep('xxx',names(Y),value=TRUE)
names(Y)[…]的一种更直接的方式
谢谢你的提示@MichaelChirico!
mget
很有魅力。谢谢@Frank和@docendo!
X[Y, (cols) := mget(paste0("i.", cols)), on = "id"]