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

在R语言中实现基于单字符差异的柔性数据合并

灵活模糊匹配合并数据集的解决方案

要实现仅差一个字符且唯一对应的键合并,不能直接用基础的merge()(它只支持完全匹配),得先筛选出符合条件的唯一键对,再基于这些配对完成合并。以下是具体步骤和代码:

1. 构造示例数据集

先模拟你提到的两个数据集:

df1 <- data.frame(
  Chave1 = c("AA_DLA_25051946", "BAJ_FRR_10091975", "CBR_ARM_30111961"),
  Valor1 = c(1, 2, 3)  # 示例数据列
)

df2 <- data.frame(
  Chave2 = c("BA_DLA_25051946", "AB_FB_31101952", "ABR_ARM_30111961"),
  Valor2 = c(10, 20, 30)  # 示例数据列
)

2. 生成所有键的配对并筛选符合条件的组合

首先生成两个数据集键的所有可能组合,再用你的字符串比较逻辑筛选出仅差一个字符的配对:

# 优化你的字符串比较函数,支持向量级别的配对比较
comparar_strings <- function(vec1, vec2) {
  mapply(function(s1, s2) {
    # 拆分字符后统计差异数,判断是否≤1
    sum(strsplit(s1, "")[[1]] != strsplit(s2, "")[[1]]) <= 1
  }, vec1, vec2)
}

# 生成所有键的笛卡尔积配对
all_pairs <- expand.grid(Chave1 = df1$Chave1, Chave2 = df2$Chave2, stringsAsFactors = FALSE)
# 标记符合条件的配对
all_pairs$is_match <- comparar_strings(all_pairs$Chave1, all_pairs$Chave2)
# 筛选出初步匹配的结果
matched_pairs <- all_pairs[all_pairs$is_match, ]

3. 确保配对的唯一性

必须保证每个Chave1只对应一个Chave2,且每个Chave2只对应一个Chave1,避免一对多或多对一的错误合并:

# 统计每个Chave1的配对数量,保留仅出现1次的
valid_chave1 <- names(table(matched_pairs$Chave1))[table(matched_pairs$Chave1) == 1]
# 统计每个Chave2的配对数量,保留仅出现1次的
valid_chave2 <- names(table(matched_pairs$Chave2))[table(matched_pairs$Chave2) == 1]
# 筛选出双向唯一的配对
unique_matches <- matched_pairs[
  matched_pairs$Chave1 %in% valid_chave1 & matched_pairs$Chave2 %in% valid_chave2,
]

4. 基于唯一配对合并数据集

用筛选出的唯一配对作为桥梁,将两个数据集合并:

# 给df1添加对应的Chave2
df1_with_match <- df1[df1$Chave1 %in% unique_matches$Chave1, ]
df1_with_match$Chave2 <- unique_matches$Chave2[match(df1_with_match$Chave1, unique_matches$Chave1)]

# 合并两个数据集
final_result <- merge(df1_with_match, df2, by = "Chave2", all.x = TRUE)
# 调整列顺序,保留原键列
final_result <- final_result[, c("Chave1", "Chave2", "Valor1", "Valor2")]

运行后,你会得到AA_DLA_25051946与BA_DLA_25051946成功合并的结果,同时排除了不满足唯一对应或差异超过1个字符的配对。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:52:02