左联接从右 table 添加所有行

Left join adding all rows from right table

我注意到,当通过引用更新时,如果通过连接键有更多棕褐色的行,我会从右边丢失一些行 table。 我怎么浏览论坛都找不到怎么弄。有什么东西逃脱了我? 即使使用 mult= 它似乎也不起作用。

由于性能和体积问题,我想通过参考不断更新。

在我的代表中,我希望 a=2

有两行
A <- data.table(a = 1:4, b = 12:15)
B <- data.table(a = c(2,2,5), b = 23:25)  

A[B, on = 'a', newvar := i.b, mult = 'all']

谢谢!!

一个选项是在 'B' 中创建一个 list 列并进行连接和分配 (:=),因为 := 无法扩展原始数据的行。

A[B[, .(b = .(b)), a], on = .(a), newvar := i.b]

-输出

> A
   a  b newvar
1: 1 12       
2: 2 13  23,24
3: 3 14       
4: 4 15      

一旦我们有了 listunnest

就更容易了
library(tidyr)
A[, unnest(.SD, newvar, keep_empty = TRUE)]
# A tibble: 5 x 3
      a     b newvar
  <int> <int>  <int>
1     1    12     NA
2     2    13     23
3     2    13     24
4     3    14     NA
5     4    15     NA

或者使用 merge.data.table

的完全连接
merge(A, B, by = 'a', all.x = TRUE)
   a b.x b.y
1: 1  12  NA
2: 2  13  23
3: 2  13  24
4: 3  14  NA
5: 4  15  NA