R data.table join中i表达式的.SD和.SDcols
我试图基于联接将列的子集从Y复制到X,其中列的子集是动态的 我可以很容易地识别列: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
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"]