You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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:保留温度数据的所有行,降雨数据匹配不上的位置显示NA
    • inner_join:仅保留两个数据集都存在的Country+Year组合
    • full_join:保留两个数据集的所有行,匹配不上的位置显示NA

内容的提问来源于stack exchange,提问作者Sammy_beep_beep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:08:29