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

R语言如何实现模糊去重替代unique()统计客户关联的不同地址数量

按客户分组的地址模糊去重统计实现

需求说明

需要对地址数据做模糊去重后,统计每个客户对应的不同地址数量,避免写法不同但实际指向同一地址的记录被判定为不同值。

测试数据样例

address <- c("UNIT 3412 MANANSALA TOWER ESTRELLA ST ROCKWELL POBLACION MAKATI CITY",
"UNIT 3412 MANANSALA ESTRELLA ST BRGY POBLACION ROCKWELL . MAKATI CITY 1210",
"LOT 1 AND 3 WESTWOOD SUBD MANDURRIAO ILOILO CITY ILOILO",
"M VELEZ ST, NA, GUADALUPE, CEBU CITY, CEBU, PH",
"1410 CAVITE ST, TONDO I / II, NCR, CITY OF MANILA, FIRST DISTRICT")
customer_id <- c(1,1,1,2,2)
dt <- data.table(cbind(address,customer_id))

精确去重的局限

精确去重实现代码很简单:

dt[, .(addresses = length(unique(address))), by = customer_id]

运行结果:

customer_id addresses
1:           1         3
2:           2         2

这个结果的问题在于,customer_id为1的前两条地址实际指向同一个位置,却因为写法差异被判定为两个不同地址,统计结果不符合预期。

曾尝试使用revtools包的find_duplicates函数实现该需求:

find_duplicates(dt, match_variable = "address", group_variables = "customer_id", method = "osa")

但该方法运行速度很慢,且输出结果不符合预期。

模糊去重实现方案

使用stringdist包配合data.table实现,该方案底层为C语言实现,计算效率远高于纯R实现的包,适合批量数据处理。

实现代码

# 加载依赖包
library(data.table)
library(stringdist)

# 自定义模糊去重统计函数
count_unique_fuzzy <- function(address_vec, sim_threshold = 0.8, sim_method = "jw") {
  # 计算组内所有地址的两两相似度矩阵
  sim_matrix <- stringsimmatrix(address_vec, method = sim_method)
  # 给相似地址打同一簇标签
  cluster_tag <- rep(NA, length(address_vec))
  current_id <- 1
  for (i in seq_along(address_vec)) {
    if (is.na(cluster_tag[i])) {
      same_cluster <- sim_matrix[i, ] >= sim_threshold
      cluster_tag[same_cluster] <- current_id
      current_id <- current_id + 1
    }
  }
  # 簇的数量即为去重后的地址数
  return(length(unique(cluster_tag)))
}

# 按客户分组统计
dt[, .(addresses = count_unique_fuzzy(address)), by = customer_id]

运行结果

customer_id addresses
1:           1         2
2:           2         2

参数调整说明

  • sim_method:字符串相似度算法,地址匹配推荐用jw(Jaro-Winkler,对地址这类短文本匹配准确率高),也可根据需求替换为cosine(余弦相似度)、osa(最优字符串对齐距离)等算法
  • sim_threshold:相似度阈值,取值范围01,数值越大要求匹配度越高,地址匹配场景一般设置在0.70.9区间即可,可根据自身数据集的实际情况调整阈值到最优效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 16:57:03