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

基于字符串及子串相似性合并R语言DataFrame:匹配关键词关联ID

R语言实现子串匹配关联DataFrame

需求明确:现有两个DataFrame,search存的是格式不规范的地址语句(A列),find存的是带对应ID的城市关键词(Buzzword列)。需要在search的A列中匹配find里的关键词(支持子串匹配),把匹配到的关键词和ID关联到结果里,未匹配的标记NA。

先说明:你给的示例results里有几处错误,比如第三行的Buzzword应该是"text3"而非"toxt2",ID应为3;第四行"toxt2"不在关键词列表里,所以Buzzword和ID都得是NA;第五行无匹配项也应该保留并标记NA。

下面是两种实用的实现方法:

方法一:基础R + stringr包(适合小数据集)

先清理search里的多余空格,再逐个匹配关键词并关联ID:

library(stringr)

# 清理A列的多余空格(多个空格合并为一个,首尾空格去掉)
search$A <- str_squish(search$A)

# 从A列中提取匹配的Buzzword
search$Buzzword <- str_extract(search$A, paste(find$Buzzword, collapse = "|"))

# 根据匹配到的Buzzword关联对应的ID
search$ID <- find$ID[match(search$Buzzword, find$Buzzword)]

# 查看最终结果
print(search)

运行后会得到正确的匹配结果,未匹配的行Buzzword和ID显示NA。

方法二:用fuzzyjoin包实现正则左连接(适合大数据集)

如果数据集较大,用fuzzyjoin的正则匹配连接会更高效简洁:

library(fuzzyjoin)
library(stringr)

# 先清理空格
search$A <- str_squish(search$A)

# 执行正则左连接,规则是A列包含Buzzword
results <- regex_left_join(search, find, by = c("A" = "Buzzword"))

# 查看结果
print(results)

这个方法一步完成匹配和关联,自动保留所有search的行,匹配到的填充对应Buzzword和ID,未匹配的为NA。

正确结果示例

最终的results应该是这样的:

#                                 A Buzzword ID
# 1        This is a random example3  example3  1
# 2     This is even more radom test2     test2  2
# 3 Why would text3 this happen text3     text3  3
# 4               how can toxt2 this      <NA> NA
# 5              complete difference      <NA> NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:46:27