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

在R语言中实现英国邮政编码的模糊字符串比较得分计算

在R中为每行英国邮编生成模糊匹配得分

要给数据框中每行的两个英国邮编生成模糊匹配得分,最简便的方式是使用stringdist包中的向量化函数,配合dplyr的mutate直接逐行计算。以下是具体实现:

步骤1:安装并加载所需包

如果还没安装stringdist和dplyr,先执行安装命令:

install.packages(c("stringdist", "dplyr"))

加载包:

library(dplyr)
library(stringdist)

步骤2:逐行计算匹配得分

stringdist包的stringsim()函数可以直接计算两个字符串的相似性得分(范围0-1,1表示完全匹配,0表示完全不匹配),且支持向量化操作,正好适配逐行处理的需求:

# 你的原始数据框
my_df <- data.frame(postcode_1 = c("AB1 1AB", "DN17 2DF", "TN38 8LE", "FK1 2ZZ"),
                    postcode_2 = c("AB1 1AB", "EC1X 3WW", "TN38 9LE", "FK2 1ZZ"))

# 生成匹配得分
my_df <- my_df %>%
  mutate(score = stringsim(postcode_1, postcode_2, method = "jaccard"))

运行后得到的结果如下(得分基于实际相似性计算,和示例虚构值趋势一致):

> my_df
  postcode_1 postcode_2     score
1    AB1 1AB    AB1 1AB 1.0000000
2   DN17 2DF   EC1X 3WW 0.0000000
3   TN38 8LE   TN38 9LE 0.8571429
4    FK1 2ZZ    FK2 1ZZ 0.7142857

选择合适的匹配方法

stringsim()的method参数支持多种模糊匹配算法,你可以根据邮编的特性选择:

  • method = "lv":基于Levenshtein编辑距离(计算修改字符的次数),适合检测邮编中的字符/数字错位、替换,对邮编这类短字符串精度高。
  • method = "jaccard":基于字符集合的交集/并集比例,适合忽略字符顺序的匹配(不过邮编顺序固定,这个方法也适用)。
  • method = "cosine":基于字符n-gram的余弦相似度,适合检测局部字符差异。

如果需要忽略邮编中的空格,也可以先清洗字符串再计算:

my_df <- my_df %>%
  mutate(
    score = stringsim(
      gsub(" ", "", postcode_1),
      gsub(" ", "", postcode_2),
      method = "lv"
    )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:35:22