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

2023-12-09

我正在尝试根据联接将列的子集从 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(使用前将#替换为@)

data.table 连接中 i 表达式的 .SD 和 .SDcols 的相关文章

随机推荐