我正在尝试根据连接将列子集从 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
和 .SDcols
适用于 i expression
的构造?或者,我是否需要为 j expression
建立一个字符串?和 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"]
正如 Frank 在他的评论中指出的那样,在列名前加上
i.
可能更安全。确保分配的列确实来自 Y
:X[Y, (cols) := mget(paste0("i.", cols)), on = "id"]
关于r - .SD 和 .SDcols 用于 data.table 连接中的 i 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257664/