You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于模糊匹配字符串实现两张表左连接的问题求助

基于模糊匹配字符串实现两张表左连接的问题求助

我来帮你排查一下这个问题~你现在遇到的匹配失败问题,主要是几个小细节没处理好,咱们一步步来解决:

  • 变量名不匹配:你定义的表是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:54:46