使用一个变量中存储的多个列名称联接数据表

时间:2019-03-06 16:27:09

标签: r data.table

我正在尝试对两个数据表进行更新连接,这些数据表需要使用字段(不止一个)来连接存储在变量中的连接。下面是一个示例:

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()`

1 个答案:

答案 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