如何在R中基于日均值对象用group_by和summarise计算月均值?
解决按月分组计算月均值的问题
直接给你修改后的代码,关键调整了分组逻辑,自动处理不同月份天数和闰年:
mn <- abc %>% select(any_of(cn)) %>% as_tibble() %>% # 按月份分组,lubridate自动处理30/31天、闰年2月 group_by(Time_sp = lubridate::floor_date(`Date/Time`, "month")) %>% # 格式化年月为简洁的YYYY-MM格式,也可保留完整时间格式 mutate(Time_sp = format(Time_sp, "%Y-%m")) %>% summarise(across(where(is.numeric), ~ if(mean(is.na(.x)) > 0.8) NA else mean(.x, na.rm = TRUE))) write.csv(mn, paste0(dirlist[idx],"_mn.csv"), row.names = FALSE)
关键修改说明:
- 分组逻辑调整:将
floor_date的时间单位从"60 mins"改为"month",这个函数会自动把每个日期映射到当月的第一天,不管当月是30天、31天还是闰年的2月,完美适配你的需求。 - 日期格式化优化:把时间格式改成
"%Y-%m"(比如2024-05),这样输出的月份标识更直观;如果需要保留完整的月初时间字符串,也可以继续用原来的"%Y-%m-%d %H:%M:%S+00"。 - 适配日均值数据:因为你的
abc是日均值数据集,按月份分组后,summarise会自动对当月所有日均值计算平均值,直接得到月均值结果。
内容的提问来源于stack exchange,提问作者Alexia k Boston
相关产品推荐
相关产品推荐

