1

我遇到了来自 dplyr 的 semi_join 问题。理想情况下,我想对 dfA 与 dfB 进行半联接。dfA 具有重复值,dfB 也是如此。我想从 dfA 中撤回所有与 dfB 匹配的值,甚至在 dfA 中重复。

dfA              dfB               >>     dfC
x    y    z      x    g                   x    y    z   
1    r    5      1    lkm                 1    r    5
1    b    4      1    pok                 1    b    4
2    4    e      2    jij                 2    4    e
3    5    r      2    pop                 3    5    r
3    9    g      3    hhg                 3    9    g
4    3    0      5    trt

我想得到的是上面的 dfC 输出。因为至少有 1 个 x 匹配,所以它会拉回 dfA 中的所有 x

semi_join(dfA, dfB, by = "x")
dfC
x    y    z  
1    r    5
2    4    e
3    5    r


inner_join(dfA, dfB, by = "x")
x    y    z    g  
1    r    5    lkm
1    r    5    pok
1    b    4    lkm
1    b    4    pok
2    4    e    jij
2    4    e    pop
3    5    r    hhg
3    9    g    hhg

两者都没有给我正确的结果。任何帮助都会很棒!提前致谢

4

2 回答 2

2

不知道你为什么需要一个join:只需使用 %in%

library(data.table)
setDT(dfA)[x %in% dfB$x,]

# simple base R approach :
dfA[dfA$x %in% dfB$x,]
于 2017-01-10T16:29:54.573 回答
1

如果您正在使用dplyr并继续将其传递到管道中

library(dplyr)
dfA %>% filter(x %in% dfB$x)
于 2017-01-10T16:45:56.623 回答