合并结构不同的expenditure与cabinets数据集并新增列的实现问题
合并两个DataFrame的实现方案
步骤1:前置数据清洗
- 统一国家缩写字段格式:将
cabinets表的abv列转为全小写,和expenditure表的abv字段规则对齐,避免匹配失败 - 格式化
polarization字段:把数值中的逗号替换为小数点,将"caretaker"这类非数值标记转为空值或自定义标识,方便后续计算 - 去重处理:如果同一个国家+年份在
cabinets表中存在多条记录,可根据需求选择保留最新选举日期对应的条目,或对polarization做自定义聚合
步骤2:左连接合并表
要保留expenditure的全部800条观测,仅匹配添加cabinets的对应字段,使用国家+年份+国家缩写作为匹配键做左连接即可,R语言实现代码如下:
library(dplyr) # 清洗cabinets表 cabinets_clean <- cabinets %>% mutate(abv = tolower(abv), polarization = as.numeric(sub(",", ".", polarization))) %>% # 同国家同年去重,示例保留最新一条记录,可按需调整规则 group_by(country, year) %>% slice_tail(n = 1) %>% ungroup() # 合并表 expenditure_merged <- expenditure %>% left_join(cabinets_clean %>% select(country, year, abv, polarization, cabinet_name), by = c("country", "year", "abv"))
可选补充:空值填充
如果需要用最近选举的polarization值填充未匹配到的年份空值,可添加如下逻辑:
expenditure_merged <- expenditure_merged %>% group_by(country) %>% fill(polarization, .direction = "down") %>% ungroup()
内容的提问来源于stack exchange,提问作者user14514023
相关产品推荐
相关产品推荐

