[英]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 中而不是其他中的行,反之亦然
當前 4 列匹配時,選擇 X5 列(X5 是我的目標列)中的不匹配項
我不想要比賽。
我嘗試了兩者的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.