基于模糊匹配字符串实现两张表左连接的问题求助
基于模糊匹配字符串实现两张表左连接的问题求助
我来帮你排查一下这个问题~你现在遇到的匹配失败问题,主要是几个小细节没处理好,咱们一步步来解决:
- 变量名不匹配:你定义的表是
df1和df2,但代码里用了Table1和Table2,这会直接导致找不到表的错误 - 匹配逻辑搞反了:你的
ci_str_detect函数是检查左表的Person_Name是否包含右表的Name,但实际咱们需要的是右表的Name是否包含左表的Person_Name(比如"Perez-Tie, Mindy"里包含"PEREZ, MINDY"),逻辑反过来就匹配不到了 - 列名拼写错误:
select里写的PersoN_Name是大小写错误,应该是Person_Name - 可选优化:表中的名字可能存在前后空格,最好先做一下去空格处理,避免空格干扰匹配
下面是修正后的完整代码:
library(fuzzyjoin) library(stringr) # 读取数据并处理空格 df1 <- read.table(text=" Person_Name PEREZ, MINDY PEREZ, ABA CLARKE, LINDA THOMAS, NICOLE", header=T) %>% mutate(Person_Name = trimws(Person_Name)) # 去除名字前后的空格 df2 <- read.table(text= 'Name Work_Group "Perez-Tie, Mindy" "Group A" "Rulnick-Perez, Aba" "Group C" "Mcabe-Clarke, Linda" "Group A" "Thomas, Nicole" "Group B"', header=T) %>% mutate(Name = trimws(Name)) # 去除名字前后的空格 # 修正匹配逻辑:检查右表的Name是否包含左表的Person_Name(忽略大小写) ci_str_detect <- function(x, y){ str_detect(y, regex(x, ignore_case = TRUE)) } # 执行模糊左连接并筛选列 result <- fuzzy_left_join(df1, df2, by = c("Person_Name" = "Name"), match_fun = ci_str_detect) %>% select(Person_Name, Name, Work_Group) print(result)
运行这段代码后,你会得到正确的匹配结果:
Person_Name Name Work_Group 1 PEREZ, MINDY Perez-Tie, Mindy Group A 2 PEREZ, ABA Rulnick-Perez, Aba Group C 3 CLARKE, LINDA Mcabe-Clarke, Linda Group A 4 THOMAS, NICOLE Thomas, Nicole Group B
备注:内容来源于stack exchange,提问作者Pxanalyst
相关产品推荐
相关产品推荐

