如何基于Key合并迁移流入流出数据集(无需硬编码)
解决方案
可以用dplyr包实现这个合并需求,全程无需硬编码任何县名、州名、FIPS或年份,完全通过Key字段关联处理,具体步骤如下:
library(dplyr) # 第一步:预处理两个数据集,统一字段命名 inflow_clean <- inflow_df %>% rename( FIPS = Origin_FIPS, State = Origin_StateName, County = Origin_Place, Inflow = InIndividuals ) %>% select(Key, County, State, FIPS, Inflow, FiscalYear, Year) outflow_clean <- outflow_df %>% rename( FIPS = Dest_FIPS, State = Dest_StateName, County = Dest_Place, Outflow = OutIndividuals ) %>% select(Key, County, State, FIPS, Outflow, FiscalYear, Year) # 第二步:按Key做全连接,自动填充缺失值为NA merged_df <- full_join(inflow_clean, outflow_clean, by = "Key") %>% # 合并重复信息列(同一Key对应的县/州/FIPS/年份信息唯一,取非NA值) mutate( County = coalesce(County.x, County.y), State = coalesce(State.x, State.y), FIPS = coalesce(FIPS.x, FIPS.y), FiscalYear = coalesce(FiscalYear.x, FiscalYear.y), Year = coalesce(Year.x, Year.y) ) %>% # 保留目标列并调整顺序 select(Key, County, State, FIPS, Inflow, Outflow, FiscalYear, Year) # 查看最终结果 print(merged_df)
代码说明
- 预处理阶段:将两个数据集中语义相同的字段统一命名(比如把
Origin_FIPS和Dest_FIPS统一改为FIPS),同时筛选出核心字段,避免后续合并时出现冗余列。 - 全连接操作:使用
full_join基于Key合并两个数据集,自动保留所有观测记录,不存在的对应值会自动填充为NA。 - 合并重复列:同一
Key对应的县、州、FIPS、年份等信息是唯一的,用coalesce函数取两个列中的非NA值,确保这类信息完整且无重复。 - 调整列顺序:最后将列调整为你需要的目标格式。
运行上述代码后,得到的结果将完全匹配你给出的期望格式。
内容的提问来源于stack exchange,提问作者Ed_Gravy
相关产品推荐
相关产品推荐

