R/dplyr:宽长格式表关联方法,合并地址表与社区区域统计数据
实现方案
优先使用dplyr搭配stringr处理,核心思路是将长表的统计数据按维度拆分后分别关联,全程符合tidyverse语法规范,逻辑清晰易维护。
步骤1:加载依赖包
library(dplyr) library(stringr)
步骤2:预处理统计长表
首先修正样例数据中type列的拼写错误,提取去掉前缀的纯ID,再按维度拆分为社区、片区两个统计子表:
# 统一清洗统计长表 stat_clean <- neighborhood_area_data %>% # 修正type列拼写错误 mutate(type = case_when( str_detect(type, "Neigh") ~ "Neighborhood", TRUE ~ "Area" )) %>% # 提取去除前缀的可关联ID mutate(join_id = str_remove(neighborhood_and_area, "^NEIGH_|^AREA_")) # 拆分出社区维度统计表,重名字段避免关联后冲突 neigh_stat <- stat_clean %>% filter(type == "Neighborhood") %>% select( county, join_id, neighborhood_residents = Number_of_Residents, neighborhood_avg_age = Average_Age ) # 拆分出片区维度统计表,重名字段避免关联后冲突 area_stat <- stat_clean %>% filter(type == "Area") %>% select( county, join_id, area_residents = Number_of_Residents, area_avg_age = Average_Age )
步骤3:两次左连合并到地址表
通过county+对应维度ID双字段关联,保证跨县重名ID不会关联错误:
final_result <- adresses %>% # 关联社区统计数据 left_join(neigh_stat, by = c("county" = "county", "neighborhood" = "join_id")) %>% # 关联片区统计数据 left_join(area_stat, by = c("county" = "county", "area" = "join_id"))
方案优势
- 双字段关联规避了不同县存在同名社区/片区的关联错误问题
- 字段提前重命名避免关联后混淆社区、片区的统计指标
- 单步操作粒度小,排查匹配失败的异常值更方便
- 全程使用dplyr原生语法,性能适配百万级以上的地址数据量
内容的提问来源于stack exchange,提问作者TheNaidge
相关产品推荐
相关产品推荐

