1

dplyr の semi_join に問題があります。理想的には、dfB に対して dfA で準結合を行いたいと考えています。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 出力です。x の一致が少なくとも 1 つあるため、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 に答える