在R';当某些情况发生时,有没有一种方法可以通过不同的键进行连接?

在R';当某些情况发生时,有没有一种方法可以通过不同的键进行连接?,r,data.table,R,Data.table,我有两个表,它们有两个键的多对多关系 其中一个表在一个键中包含NA值。这些NA值通常在另一个表只有该键的一个现有值时出现 当值不是NA时,我想用两个键连接,当第二个键是NA时,我想用一个键连接 目前我有两个步骤,但我想知道是否有更好的方法 这里是我的可复制示例: 库(data.table) 种子(14) dt1键1键2测量\u 1 #>1:A-opt1 1 #>2:A-opt2 2 #>3:B-opt1 5 #>4:B-opt1 2 #>5:C-opt1 5 dt2 id键1键2测量值2 #>1

我有两个表,它们有两个键的多对多关系

其中一个表在一个键中包含
NA
值。这些
NA
值通常在另一个表只有该键的一个现有值时出现

当值不是
NA
时,我想用两个键连接,当第二个键是
NA
时,我想用一个键连接

目前我有两个步骤,但我想知道是否有更好的方法

这里是我的可复制示例:

库(data.table)
种子(14)
dt1键1键2测量\u 1
#>1:A-opt1 1
#>2:A-opt2 2
#>3:B-opt1 5
#>4:B-opt1 2
#>5:C-opt1 5
dt2 id键1键2测量值2
#>1:1A A-opt1 0.0287647
#>2:2A-opt2-0.1803785
#>3:3A-opt2-0.3011443
#>4:4b-0.9790001
#>5:5 C 1.0416423
#这是我目前的两步方法
结果1:A-opt1 1 0.0287647
#>2:A-opt2 2-0.1803785
#>3:A-opt2 2 3-0.3011443
#>4:B-opt1 5 4-0.9790001
#>5:B-opt1 2 4-0.9790001
#>6:C-opt1 5 1.0416423

由(v0.3.0)创建于2019-11-13,我个人会这样做:

rbind(
  merge(dt1, dt2[!is.na(key2)], by=c('key1', 'key2')),
  merge(dt1, dt2[is.na(key2)][,key2:=NULL], by='key1')
)
我认为它比您当前的方法更具可读性,但仍然包括这两个步骤,因为您有两个不同的连接条件