r语言 - 左连接添加右表的所有行



我注意到,当使用引用更新时,如果通过连接键有多个行,我会从右表中丢失一些行。不管我怎么浏览论坛,我都找不到怎么做。有什么事我忘了?即使使用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      

一旦我们有了list,unnest就更容易了

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

最新更新