R语言dplyr实现x匹配基础上y或z字段OR条件的dataframe关联
方案1:使用dplyr 1.1.0+ 原生支持的自定义连接条件(最推荐)
dplyr从1.1.0版本开始提供join_by()函数支持自定义连接逻辑,直接把你的匹配规则写在连接条件里即可,代码简洁且性能最优:
library(dplyr) left_join( df1, df2, join_by(x == x, y == y | z == z) ) %>% select(id1, id2)
输出结果和你示例的期望结果完全一致。
方案2:低版本dplyr兼容方案
如果你的dplyr版本低于1.1.0无法使用join_by(),可以先按公共字段x做内连接,再过滤符合y相等或z相等条件的行即可:
inner_join(df1, df2, by = "x", suffix = c("_1", "_2")) %>% filter(y_1 == y_2 | z_1 == z_2) %>% select(id1, id2)
因为你已经明确两个表行数相同且行是唯一匹配的,所以过滤后不会出现重复行,不需要额外去重操作,性能远高于多次join后合并结果的写法。
内容的提问来源于stack exchange,提问作者han-tyumi
相关产品推荐
相关产品推荐

