使用dplyr按日分组并基于条件计算气象数据均值
气象小时数据转日数据的条件分组处理
需求说明
将逐小时气象数据按Day字段分组生成日数据,规则如下:
- 仅对满足
HumH >50 | WetH>30条件的小时行,计算Temp和RH的均值 - 若当日无任何满足条件的行,
Temp_day和RH_day直接设为0
现有代码问题
当前使用dplyr的代码未实现上述条件逻辑,原代码如下:
weather_day <- weather_hour %>% group_by(as.numeric(Day)) %>% group_map(~head(.x,24L)) %>% summarize(Temp_day=mean(Temp),RH_day=mean(RH))
解决方案代码
library(dplyr) weather_day <- weather_hour %>% # 按Day字段分组,确保每个组对应单日数据 group_by(Day = as.numeric(Day)) %>% summarize( # 对满足条件的行计算Temp均值,无满足行时返回NaN Temp_day = mean(Temp[HumH > 50 | WetH > 30], na.rm = TRUE), # 对满足条件的行计算RH均值,无满足行时返回NaN RH_day = mean(RH[HumH > 50 | WetH > 30], na.rm = TRUE) ) %>% # 将NaN替换为0,对应当日无满足条件行的情况 mutate( Temp_day = ifelse(is.na(Temp_day), 0, Temp_day), RH_day = ifelse(is.na(RH_day), 0, RH_day) )
逻辑说明
- 先按
Day字段分组,保证每个分组对应一天的24小时数据 - 在
summarize步骤中,通过索引筛选出满足HumH >50 | WetH>30的行,计算对应Temp和RH的均值,na.rm=TRUE用于忽略可能存在的NA值 - 若当日无满足条件的行,均值计算会返回
NaN,最后通过mutate将这些NaN替换为0,符合需求规则
内容的提问来源于stack exchange,提问作者pantelis kleanth
相关产品推荐
相关产品推荐

