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

R语言中如何实现含相似一致字符串的数据框连接

数据框连接时带“Total”的行业无法匹配编码

问题描述

我在对两个数据框X和Y执行连接操作时遇到困难:X包含行业、子行业及对应支出金额,Y是行业与编码的索引表。当前使用left_join函数连接后,X中如“Total Min”这类包含“Total”的行业行无法匹配到Y中对应行业(如Min)的INDcode。我希望“Min”和“Total Min”都能匹配到INDcode“M”,虽可手动处理或重新计算替换总行,但想寻求更优实现方法,尝试过fuzzyjoin包但未找到合适用法。

示例代码与当前结果

IND<- c("Ag", "Ag", "Total Ag", "Min", "Min", "Min", "Total Min")
SubIND<- c("agriculture", "aquaculture", "Total", "gold", "copper", "zinc", "Total")
Dollars<-sample(1:100,7)
INDcode<-c("A","B","C","D","E","G","H","M","R","Y","Z")
INDi<-c("Ag","Bar","Car","Don","Ec","Gl","Hu","Min","Run","Yt","Zal")

X <- data.frame(IND,SubIND,Dollars)
Y <- data.frame(INDi,INDcode)
join<-left_join(X,Y,by=join_by(IND==INDi))

print(join)

当前输出:

IND      SubIND Dollars INDcode
1        Ag agriculture       4       A
2        Ag aquaculture      63       A
3  Total Ag       Total      35    <NA>
4       Min        gold      68       M
5       Min      copper      14       M
6       Min        zinc      80       M
7 Total Min       Total      48    <NA>

解决方案

方法1:预处理提取核心行业名称

通过正则移除"Total "前缀,得到和Y中匹配的行业名称,再执行连接:

library(dplyr)
library(stringr)

# 预处理X的IND列,移除开头的"Total "
X_clean <- X %>%
  mutate(IND_match = str_remove(IND, "^Total\\s"))

# 执行左连接并清理临时列
final_join <- left_join(X_clean, Y, by = join_by(IND_match == INDi)) %>%
  select(-IND_match)

print(final_join)

方法2:使用fuzzyjoin进行正则匹配

利用fuzzyjoin的regex_left_join,匹配IND字段中包含Y的INDi关键词的行:

library(fuzzyjoin)

# 正则左连接,匹配IND中包含INDi的情况
final_join <- regex_left_join(X, Y, by = c("IND" = "INDi")) %>%
  # 去重确保每行只保留正确匹配
  group_by(IND, SubIND, Dollars) %>%
  slice(1) %>%
  ungroup()

print(final_join)

方法3:提取最后一个单词(适用于固定格式)

如果所有带Total的行都是"Total + 行业名"的格式,直接取最后一个单词作为匹配键:

library(dplyr)
library(stringr)

X_clean <- X %>%
  mutate(IND_match = word(IND, -1))

final_join <- left_join(X_clean, Y, by = join_by(IND_match == INDi)) %>%
  select(-IND_match)

print(final_join)

预期输出

IND      SubIND Dollars INDcode
1        Ag agriculture       4       A
2        Ag aquaculture      63       A
3  Total Ag       Total      35       A
4       Min        gold      68       M
5       Min      copper      14       M
6       Min        zinc      80       M
7 Total Min       Total      48       M

内容的提问来源于stack exchange,提问作者Gilrob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:12:32