我正在尝试根据联接将列的子集从 Y 复制到 X,其中列的子集是动态的
我可以很容易地识别这些列:names(Y)[grep("xxx", names(Y))]
但是当我尝试在 j 表达式中使用该代码时,它只给出列名,而不是列的值。这.SD
and .SDcols
非常接近,但它们仅适用于x expression
。我正在尝试做这样的事情:
X[Y[names(Y)[grep("xxx", names(Y))] := .SD, .SDcols = names(Y)[grep("xxx", names(Y)), on=.(zzz)]
是否有一组等价的.SD
and .SDcols
适用于的构造i expression
?或者,我是否需要为j expression
and 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"]
正如弗兰克在他的评论中指出的那样,在列名称前添加前缀可能更安全i.
确保分配的列确实来自Y
:
X[Y, (cols) := mget(paste0("i.", cols)), on = "id"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)