R语言如何将温度风速小时数据转为日均值并与PM10数据合并?
问题原因
你之前的代码存在两个明确错误,导致结果不符合预期:
- 构造时间序列时,将两段完全相同的小时级时间序列做了拼接,直接让数据行数翻倍为26304*2=52608条
- 创建数据框时仅传入了
DateTime单个字段,没有关联实际的温度、风速观测值,因此输出的DF仅包含1列
完整处理流程
整个流程无需手动构造空时间序列,直接基于原始观测数据做聚合、合并即可,步骤如下:
1. 加载依赖包
library(lubridate) library(dplyr)
2. 读取并预处理小时级气象数据
# 替换为你的气象数据实际存储路径 met_hourly <- read.csv("你的气象数据文件.csv") # 按原始数据的日/月/年 时:分格式解析时间列 met_hourly$date <- dmy_hm(met_hourly$date) # 提取日期维度(截断到天),用于后续分组计算 met_hourly$cal_date <- as.Date(met_hourly$date)
3. 聚合计算温度、风速日均值
met_daily <- met_hourly %>% group_by(cal_date) %>% summarise( # 计算日均值时自动跳过缺失值,可根据你的需求调整na.rm参数 temperature_daily = mean(temperature, na.rm = TRUE), wind_speed_daily = mean(Wind_Speed, na.rm = TRUE), .groups = "drop" )
校验提示:你的数据时间范围覆盖2018-01-01至2020-12-31共3年,正常聚合后
met_daily应为1096行,和你持有的PM10序列长度完全一致。
4. 与PM10日序列合并
合并前先确认你的PM10原子向量是严格按2018-01-01到2020-12-31的自然日顺序排列,无乱序、缺漏,直接执行绑定即可:
# 生成匹配的日期序列,和PM10的时间范围一一对应 full_date <- seq.Date(from = as.Date("2018-01-01"), to = as.Date("2020-12-31"), by = "day") # 合并为最终分析数据集 final_dataset <- data.frame( date = full_date, PM10 = 替换为你的PM10向量对象名, temperature = met_daily$temperature_daily, wind_speed = met_daily$wind_speed_daily )
注意事项
- 如果聚合后
met_daily行数不等于1096,可通过sum(is.na(met_hourly$date))检查是否存在时间解析失败的记录,同时排查原始数据是否存在整段缺测 - 你的原始小时数据从2018-01-01 1:00起始,到2021-01-01 0:00截止,时间范围完整覆盖3年自然日,正常情况下不会出现聚合后的日期缺口
内容的提问来源于stack exchange,提问作者nmuni
相关产品推荐
相关产品推荐

