我正在尝试对两个数据表进行更新连接,这些数据表需要使用字段(不止一个)来连接存储在变量中的连接。下面是一个示例:
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
()`
答案 0 :(得分:4)
我认为您只需要输入两个==,如下所示:
DT1[DT2,
on=c(paste0(joinFields, '==', joinFields)),
nomatch=0L]
# col1 col2 lett
# 1: 1 5 a
# 2: 2 4 b
# 3: 3 3 c
# 4: 2 4 b
# 5: 3 3 c
# 6: 4 2 d
# 7: 5 1 e
# 8: 1 5 a
即使您不需要使用c()
:
DT1[DT2,
on=paste0(joinFields, '==', joinFields),
nomatch=0L]
# col1 col2 lett
# 1: 1 5 a
# 2: 2 4 b
# 3: 3 3 c
# 4: 2 4 b
# 5: 3 3 c
# 6: 4 2 d
# 7: 5 1 e
# 8: 1 5 a