如何用R基于前缀匹配补全数据集里的不完整英国邮政编码
英国邮政编码补全解决方案
需求说明
利用包含完整英国邮政编码的数据集,补全仅含前缀的不完整邮编字段:匹配前缀后,用第一个(或任意一个)对应的完整邮编替换原不完整项。
已有数据读取代码(修正后)
# 加载依赖包 library(tidyverse) library(readxl) # 读取不完整邮编数据集 HomePostcode <- read_excel("C:/Users/JWP/IncompletePostcodeData.xlsx", sheet = "IncompletePostcodeData", col_types = c("skip", "text", "skip")) # 读取完整英国邮编数据集 AllUKPostcodes <- read_excel("C:/Users/JWP/IncompletePostcodeData.xlsx", sheet = "AllUKPostcodesData", col_types = c("skip", "text", "skip"))
解决方案代码
步骤1:构建前缀-完整邮编映射表
从完整邮编数据中提取前缀,按前缀分组后保留每组第一个完整邮编,建立匹配关系:
# 生成前缀与完整邮编的映射(每个前缀对应第一个匹配的完整邮编) postcode_mapping <- AllUKPostcodes %>% # 提取完整邮编中空格前的前缀部分 mutate(postcode_prefix = str_extract(Postcode, "^[^\\s]+")) %>% # 按前缀分组,仅保留每组第一条记录 group_by(postcode_prefix) %>% slice_head(n = 1) %>% ungroup() %>% # 保留必要字段用于匹配 select(postcode_prefix, full_postcode = Postcode)
步骤2:匹配补全不完整邮编
将不完整邮编数据集与映射表连接,替换为完整邮编:
# 完成邮编补全 completed_postcodes <- HomePostcode %>% # 根据前缀匹配映射表 left_join(postcode_mapping, by = c("Postcode" = "postcode_prefix")) %>% # 用完整邮编替换原不完整项,无匹配则保留原内容 mutate(Postcode = coalesce(full_postcode, Postcode)) %>% # 移除临时辅助字段 select(-full_postcode)
示例输出
| Postcode |
|---|
| PE2 4LR |
| LE7 2DL |
内容的提问来源于stack exchange,提问作者JeffWithpetersen
相关产品推荐
相关产品推荐

