如何将多个表格的指定行范围聚合为新数据框?
解决方案
不需要用循环,用dplyr包的管道操作就能简洁高效地完成需求,步骤如下:
1. 简化兼容年份计算
直接算出三个表格的共同兼容年份范围,无需单独定义每个表格的极值:
library(dplyr) # 计算共同的起始和结束年份 min_high <- max(min(Football$Year), min(UK_Population$Year), min(UK_House_Prices$Year)) max_low <- min(max(Football$Year), max(UK_Population$Year), max(UK_House_Prices$Year))
2. 清洗并格式化每个表格
对每个表格完成三个操作:筛选兼容年份内的数据、保留Year列、重命名xyz列以区分来源:
# 处理Football表格 table_a_clean <- Football %>% filter(Year >= min_high, Year <= max_low) %>% select(Year, xyz_1 = xyz) # 处理UK_Population表格 table_b_clean <- UK_Population %>% filter(Year >= min_high, Year <= max_low) %>% select(Year, xyz_2 = xyz) # 处理UK_House_Prices表格(先筛选Q4再过滤年份) table_c_clean <- UK_House_Prices %>% filter(Quarter == 'Q4', Year >= min_high, Year <= max_low) %>% select(Year, xyz_3 = xyz)
3. 合并为目标数据框
通过inner_join按Year列合并三个清洗后的表格,得到包含Year、xyz_1、xyz_2、xyz_3的最终数据框:
combined_df <- table_a_clean %>% inner_join(table_b_clean, by = "Year") %>% inner_join(table_c_clean, by = "Year")
补充说明
- 如果某个表格在兼容年份范围内存在缺失的
Year记录,可以把inner_join换成full_join,再用replace_na()填充缺失值(比如replace_na(list(xyz_1 = 0)))。 - 这种方法比循环更直观,代码可读性强,且
dplyr的底层优化比手动循环效率更高。
内容的提问来源于stack exchange,提问作者JasonFromLondon
相关产品推荐
相关产品推荐

