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

R语言:实现类%in%的DataFrame列相似字符串匹配功能

R语言实现DataFrame字符串模糊匹配(类似%in%功能)

针对你需要匹配两个DataFrame的nombres列中相似字符串的需求,这里提供几种自定义实现方式,效果类似%in%但支持模糊匹配:

1. 构造示例数据

先还原你给出的测试数据:

df1 <- data.frame(nombres = c("Acesco Corporation", "Exito S.A", "AMI", "Renault"), stringsAsFactors = FALSE)
df2 <- data.frame(nombres = c("Acesco", "Exito", "AMI", "Renault"), stringsAsFactors = FALSE)

2. 自定义模糊匹配运算符(匹配部分子串,排除完全相等项)

对应你期望输出Acesco, Exito, AMI的需求,这里自定义一个运算符,只匹配子串包含但内容不完全相等的项:

# 自定义部分模糊匹配运算符
`%sin_partial%` <- function(x, table) {
  sapply(x, function(val) {
    any(sapply(table, function(pattern) {
      grepl(pattern, val, ignore.case = TRUE) && val != pattern
    }))
  })
}

# 从df2中筛选符合条件的匹配关键词
matched_terms <- df2$nombres[sapply(df2$nombres, function(p) {
  any(grepl(p, df1$nombres) & df1$nombres != p)
})]

# 输出结果
paste(matched_terms, collapse = ", ")
# [1] "Acesco, Exito, AMI"

3. 通用版:包含完全匹配的模糊匹配

如果不需要排除完全相等的项,只需要判断字符串是否包含目标子串,可以用以下两种简化实现:

Base R 版本

# 自定义通用模糊匹配运算符
`%sin%` <- function(x, table) {
  sapply(x, function(val) any(sapply(table, function(p) grepl(p, val, ignore.case = TRUE))))
}

# 获取df1中匹配的行
matched_df1 <- df1[df1$nombres %sin% df2$nombres, ]
# 获取df2中对应的匹配关键词
matched_df2 <- df2[sapply(df2$nombres, function(p) any(grepl(p, df1$nombres))), ]

stringr 包版本(更简洁)

如果你习惯使用stringr处理字符串,代码可以进一步简化:

library(stringr)

`%sin%` <- function(x, table) str_detect(x, str_c(table, collapse = "|"))

# 获取df2中对应的匹配关键词
matched_df2 <- df2[str_detect(df1$nombres, str_c(df2$nombres, collapse = "|")), ]
paste(matched_df2$nombres, collapse = ", ")

补充说明

  • ignore.case = TRUE表示忽略大小写匹配,若需要严格区分大小写,可移除该参数。
  • 自定义运算符的名称可根据个人习惯修改,比如%like_in%等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:54:25