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

在R中基于其他DataFrame数据为Events添加Avtemp列

优雅实现R中多数据框的天气温度匹配

问题描述

我有如下Events数据框:

Events

DateCityEvent
2012-06-01LAA
2014-05-02LondonB
2017-03-15ParisC

同时存在多个以城市命名的天气数据框(超过10个),示例如下:

LA_weather

DateAvtemp
2012-06-0123
2012-06-0222
----------------
2017-12-3115

London_weather

DateAvtemp
2012-06-0116
2012-05-0221
----------------
2017-12-3110

需要根据Events中的City和Date字段,匹配对应城市天气数据框的Avtemp值,为Events新增该列,最终得到如下结果:

Events(期望结果)

DateCityEventAvtemp
2012-06-01LAA23
2014-05-02LondonB21
2017-03-15ParisC10

目前已想到将所有天气数据合并为带City列的大表再关联,但希望找到更优雅的实现方式。

解决方案

方法1:批量合并天气数据后关联(高效通用)

借助tidyverse中的purrr工具批量处理所有天气数据框,自动添加城市标识后合并,再与Events关联:

# 加载依赖包
library(tidyverse)

# 列出所有天气数据框的名称(根据实际情况补充完整)
weather_df_names <- c("LA_weather", "London_weather", "Paris_weather")

# 批量读取数据、添加城市列并合并成总表
combined_weather <- map_df(weather_df_names, function(name) {
  get(name) %>% 
    mutate(City = str_remove(name, "_weather"))
})

# 关联Events数据,匹配Date和City字段
Events_with_temp <- Events %>%
  left_join(combined_weather, by = c("Date", "City"))

这种方式仅需一次合并,后续关联效率高,适合数据量较大或需要重复使用天气数据的场景。

方法2:逐行匹配(无需合并大表)

如果不想预先合并所有天气数据,可以用rowwise()逐行定位对应城市的数据框,提取目标温度:

library(dplyr)

Events_with_temp <- Events %>%
  rowwise() %>%
  mutate(Avtemp = get(paste0(City, "_weather")) %>%
           filter(Date == cur_data()$Date) %>%
           pull(Avtemp)) %>%
  ungroup()

该方法代码直观,无需提前整理所有天气数据框名称,适合数据量较小或临时查询的场景。但如果Events行数极多,性能会低于方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:35:28