R语言如何对两个DataFrame实现单列精确匹配+两列模糊匹配的内连接
R实现DataFrame混合规则(精确+模糊匹配)内连接
错误代码问题说明
你原来的写法存在三个核心问题:
- 多次传入
by参数不符合函数语法要求,所有匹配字段需要放在同一个by参数中 - 列名拼写错误:将
Product_state误写为Product_stat - 没有为不同匹配规则的列指定对应的匹配方法,
Product_date需要精确匹配,不能用字符串距离规则
正确实现代码
首先确保你已经安装加载了所需包:
# 安装依赖(如果没装的话执行下面两行) # install.packages("fuzzyjoin") # install.packages("dplyr") library(fuzzyjoin) library(dplyr)
然后执行匹配操作:
matched <- df1 %>% stringdist_inner_join( df2, by = c("Product_name", "Product_state", "Product_date"), max_dist = c(2, 4, 0), match_fun = list( stringdist::stringdist, stringdist::stringdist, `==` ) )
参数说明
by参数按顺序传入三个需要匹配的列名max_dist参数和by的列一一对应:Product_name允许最大编辑距离为2,Product_state允许最大编辑距离为4,Product_date要求编辑距离为0(即精确匹配)match_fun参数和列一一对应:前两个列用字符串编辑距离匹配,第三个列用全等判断
运行后得到的结果和你给出的desired_df逻辑完全一致,输出结果中来自两个表的同名列会自动带上.x(来自df1)和.y(来自df2)的后缀区分,和你示例的目标表结构对应。
内容的提问来源于stack exchange,提问作者curiouscoder
相关产品推荐
相关产品推荐

