r - .SD 和 .SDcols 用于 data.table 连接中的 i 表达式

标签 r join data.table

我正在尝试根据连接将列子集从 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/

相关文章:

r - 绘制太多点?

r - 合并两个 data.frames 并用 df2 的值替换 df1 某些列的值

Mysql:如果连接表的条件不匹配,如何只返回两个表的主要行?

r - 如何通过列与 data.table 库的总和来规范化每个列的值?

r - 按组用以前的值填充缺失的日期

r - 在函数内部使用 `setkey()`

r - 在 R 中使用 ezANOVA 输出进行计划对比

MySQL查询,多对多关系的交集

mysql - 哪个在性能上更好 客户端连接或服务器端连接

r - 是否有可以使用连续和分类特征进行 SMOTE 的包或函数?