如何匹配行数不同的两个数据集?ID与行政区代码映射问题
问题分析
你的代码核心问题是用c()创建映射向量时,无法存储多元素值——比如E = c(5,6)会被自动截断为单个值,导致每个ID仅对应1个行政区,所以unnest后行数还是16,没法展开到21个行政区。
修正方案
改用列表/映射表存储ID到多行政区的对应关系,再通过匹配自动展开行:
library(dplyr) library(tidyr) # 1. 构建明确的ID-行政区映射表(每个ID对应多少行政区就写多少行) id_district_map <- tibble( ID = c("A", "B", "C", "D", "E", "E", "F", "G", "H", "I", "I", "I", "J", "K", "L", "M", "N", "O", "O", "P", "P"), CODDISTRIT = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21) ) # 2. 关联原数据集与映射表,自动展开对应行 final_data <- PRUEBAsummary_NO2_2019_ID %>% left_join(id_district_map, by = "ID") %>% # 保留需要的列(可根据你的实际需求调整) select(CODDISTRIT, ID, sumhourly_exceedances, sumdaily_exceedances, count, mean_value)
代码说明
- 用
tibble构建映射表,直接明确每个ID对应的所有行政区,彻底避免向量截断问题。 left_join会自动将原数据中每个ID的行,重复对应到映射表中该ID的所有行政区,最终生成21行数据(每个行政区一行)。- 如果原数据中每个ID仅存在一行,最终结果将完全匹配你需要的21个行政区对应关系。
内容的提问来源于stack exchange,提问作者Nerea
相关产品推荐
相关产品推荐

