如何基于Country和Year合并格式不同的两个DataFrame?
解决方案
步骤1:将宽格式降雨数据转为长格式
用tidyr::pivot_longer()把年份列转为单独的Year字段,同时提取对应降雨量值:
library(tidyverse) # 模拟宽格式降雨数据示例(替换成你的实际数据) rain_wide <- tibble( Country = c("China", "USA", "India"), `2020` = c(800, 750, 900), `2021` = c(850, 780, 920), `2022` = c(820, 760, 890) ) # 转长格式 rain_long <- rain_wide %>% pivot_longer( cols = -Country, # 选中除Country外的所有年份列 names_to = "Year", # 把列名转为Year字段 values_to = "Rainfall", # 把列值转为Rainfall字段 names_transform = list(Year = as.numeric) # 将Year转为数值型,匹配温度数据的类型 )
步骤2:合并两个长格式数据集
用dplyr::left_join()(保留所有温度数据行)或inner_join()(仅保留双方共有的Country+Year组合),按Country和Year匹配:
# 模拟长格式温度数据示例(替换成你的实际数据) temp_long <- tibble( Country = c("China", "China", "USA", "USA", "India", "India"), Year = c(2020, 2021, 2020, 2021, 2020, 2022), Temperature = c(15.2, 15.8, 13.5, 14.1, 25.3, 25.7) ) # 合并数据集 combined_data <- temp_long %>% left_join(rain_long, by = c("Country", "Year"))
补充说明
- 如果降雨数据的年份列名带前缀(如
YR_2020),可以用readr::parse_number()提取年份数值:names_transform = list(Year = readr::parse_number) - 合并类型选择:
left_join:保留温度数据的所有行,降雨数据匹配不上的位置显示NAinner_join:仅保留两个数据集都存在的Country+Year组合full_join:保留两个数据集的所有行,匹配不上的位置显示NA
内容的提问来源于stack exchange,提问作者Sammy_beep_beep
相关产品推荐
相关产品推荐

