【发布时间】:2019-03-06 16:27:08
【问题描述】:
我正在尝试对两个数据表执行更新连接,其中包含我需要用于连接存储在变量中的字段(多个)。下面是一个例子:
library(data.table)
DT1 <- data.table(col1 = 1:5, col2 = 5:1, lett = letters[1:5])
DT2 <- data.table(col1 = c(1:3, 2:5, 1), col2 = c(5:3, 4:1, 5))
joinFields <- c('col1', 'col2')
我试过这样做:
DT1[DT2,
on=c(paste0(joinFields, '=', joinFields)),
nomatch=0L]
这种方式基于Join datatables using column names stored in variables中建议的解决方案。
dt1[dt2_temp,
on=c(paste0(varName, ">valueMin"), paste0(varName, "<=valueMax")),
nomatch=0L]
它不起作用。显然,我的情况有点不同,因为在我使用的示例中,有 2 个粘贴。是否有继续允许我使用on = c() 的解决方案?
编辑:我知道我可以用merge()`来做到这一点
【问题讨论】:
-
您提到“更新加入”,但不要使用
:=。您能否展示并解释所需的输出?顺便说一句,我猜你可能需要"=="而不是"=",例如DT1[DT2, on=sprintf("%s==%s", joinFields, joinFields)] -
用于连接的键在两个表中似乎相同,所以为什么不
DT1[DT2, on=joinFields, nomatch=0L]呢? -
@Frank,感谢您的建议。它确实不是更新连接。我有点懒,从另一个线程复制。我应该添加
let := i.lett -
@chinsoon12,谢谢这是一个非常简短的解决方案
标签: r data.table