簡體   English   中英

如何使用 dplyr 在 R 中進行條件連接?

[英]How to do a conditional join in R with dplyr?

例如,df1 如下所示 -

X1         X2     X3     X4         X5
Apple   Belgium   Red   Purchase   100 
Guava   Germany   Green Sale       200
Grape   Italy     Purple Purchase   500
Orange India   Orange   Sale       2000 

df2 如下所示 -

 X1         X2     X3     X4         X5
Apple   Belgium   Red   Purchase   10000 
Guava   Germany   Green Sale       20000
Grape   Italy     Purple Purchase   
Orange India   Orange   Sale       2000 

我的輸出應該是這樣的 -

 X1         X2     X3     X4         X5.x  X5.y
Apple   Belgium   Red   Purchase   100     10000
Guava   Germany   Green Sale       200    20000
Grape   Italy     Purple Purchase   500   NA

這里涉及多個操作——

  1. 選擇存在於 1 中而不是其他中的行,反之亦然

  2. 當前 4 列匹配時,選擇 X5 列(X5 是我的目標列)中的不匹配項

  3. 我不想要比賽。

我嘗試了兩者的inner_join、full_join和anti_join的組合來獲得part1。 我如何演奏第二部分? R 中是否有條件連接僅選擇不匹配項並在目標列相同時忽略?

我不想使用 sqldf。 我知道這可以在 SQL 中實現。 我想在 dplyr 中做到這一點。 任何幫助深表感謝。

TIA。

left_join(df1, df2, by = c("X1", "X2", "X3", "X4")) %>%
  filter(X5.x != X5.y | is.na(X5.x) | is.na(X5.y))
#      X1      X2     X3       X4 X5.x  X5.y
# 1 Apple Belgium    Red Purchase  100 10000
# 2 Guava Germany  Green     Sale  200 20000
# 3 Grape   Italy Purple Purchase  500    NA

R 中是否有條件連接僅選擇不匹配項並在目標列相同時忽略?

是的,我認為您可以使用data.table非對等連接來做到這data.table sqldf ,正如您所提到的。

我想在 dplyr 中做到這一點。

dplyr僅在相等時加入。 所以你加入然后過濾。


使用這些數據:

df1 = read.table(text = "X1         X2     X3     X4         X5
Apple   Belgium   Red   Purchase   100 
Guava   Germany   Green Sale       200
Grape   Italy     Purple Purchase   500
Orange India   Orange   Sale       2000", header = T)

df2 = read.table(text = "X1         X2     X3     X4         X5
Apple   Belgium   Red   Purchase   10000 
Guava   Germany   Green Sale       20000
Grape   Italy     Purple Purchase   NA
Orange India   Orange   Sale       2000", header = T)
(df1 
%>% anti_join(., df2, by = c("X1", "X2", "X3", "X4","X5")) 
%>% left_join(., df2, by = c("X1", "X2", "X3", "X4"))
)
    X1      X2     X3       X4 X5.x  X5.y
1 Apple Belgium    Red Purchase  100 10000
2 Guava Germany  Green     Sale  200 20000
3 Grape   Italy Purple Purchase  500    NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM