如何用R批量将英国邮政编码匹配至剥夺指数?
批量将英国邮政编码转换为2019剥夺指数的R方案
你可以通过以下两种主流方法在R中批量完成这个任务,不用手动访问网页:
方法1:使用postcodesioR + 官方IMD数据集
这个方法先通过API把邮政编码映射到对应的Output Area(OA,IMD的统计单元),再匹配官方的剥夺指数数据。
步骤1:安装并加载必要的包
# 安装包(首次运行时执行) install.packages(c("postcodesioR", "dplyr", "readr")) # 加载包 library(postcodesioR) library(dplyr) library(readr)
步骤2:批量查询邮政编码对应的OA
假设你有一个包含邮政编码的数据框postcodes_df,其中存储邮编的列名为postcode:
# 批量查询(API单次请求建议不超过1000条,数据量大的话可分批处理) postcode_data <- batch_postcode_lookup(postcodes_df$postcode) # 转换为数据框并提取关键信息 postcode_oa <- bind_rows(postcode_data) %>% select(postcode, oa = codes$oa) %>% filter(!is.na(oa)) # 过滤无效或无法匹配的邮政编码
步骤3:加载并匹配2019 IMD数据
你可以从英国国家统计局(ONS)下载2019 IMD核心数据集(包含OA对应的剥夺指数),然后读入R中完成匹配:
# 读入本地下载的IMD数据文件(示例文件名:"IMD_2019_OA.csv") imd_data <- read_csv("IMD_2019_OA.csv") # 匹配邮政编码与剥夺指数 final_data <- postcode_oa %>% left_join(imd_data, by = c("oa" = "OA_CODE")) %>% select(postcode, oa, IMD_Rank, IMD_Decile) # 保留需要的字段,比如排名和分位数
方法2:使用ukdepriv包(更简化的方式)
ukdepriv包封装了IMD数据和邮政编码映射逻辑,能更直接地获取结果:
步骤1:安装并加载包
# 先安装devtools(如果未安装) install.packages("devtools") # 从GitHub安装ukdepriv包 devtools::install_github("matthewgthomas/ukdepriv") library(ukdepriv)
步骤2:批量获取剥夺指数
# 假设你的邮政编码向量为postcodes_vec imd_results <- get_imd(postcodes_vec, year = 2019) # 查看结果,包含postcode、IMD排名、分位数等核心字段 head(imd_results)
注意事项
postcodesioR调用的API有请求频率限制,处理数千条邮编时建议分批次(比如每500条一批)执行,避免被限制访问。- 使用
ukdepriv前确保你的R环境已安装devtools,且网络能正常访问GitHub。 - 确保邮政编码格式规范(可提前去除多余空格,API会兼容大部分常见格式)。
内容的提问来源于stack exchange,提问作者Gabriella
相关产品推荐
相关产品推荐

