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

在R中对多年DataFrame按日期小时计算统计量并实现管道式处理

按日期小时分组计算多变量统计量的dplyr实现

你可以直接在现有合并数据的管道后继续操作,完成按月-日 小时:分:秒分组并计算均值、最大值、最小值的需求,以下是完整实现:

基础实现代码

WaterData <- BUSdata %>%
  left_join(MBdata, by = "datetime") %>%
  left_join(SUSdata, by = "datetime") %>%
  # 提取月-日 时分秒作为分组标识
  mutate(group_datetime = format(datetime, "%m-%d %H:%M:%S")) %>%
  # 按统一的月日小时分组
  group_by(group_datetime) %>%
  # 计算每个变量的均值、最大值、最小值
  summarise(
    BUSwt_mean = mean(BUSwt, na.rm = TRUE),
    BUSwt_max = max(BUSwt, na.rm = TRUE),
    BUSwt_min = min(BUSwt, na.rm = TRUE),
    MBwt_mean = mean(MBwt, na.rm = TRUE),
    MBwt_max = max(MBwt, na.rm = TRUE),
    MBwt_min = min(MBwt, na.rm = TRUE),
    SUSwt_mean = mean(SUSwt, na.rm = TRUE),
    SUSwt_max = max(SUSwt, na.rm = TRUE),
    SUSwt_min = min(SUSwt, na.rm = TRUE)
  ) %>%
  # 重命名分组列为datetime,匹配期望输出格式
  rename(datetime = group_datetime) %>%
  # 按时间顺序排序(可选,提升可读性)
  arrange(datetime)

代码分步说明

  • mutate(...):将原始datetime格式转换为%m-%d %H:%M:%S(月-日 小时:分:秒)的字符串,这样能把5年中同一月日同一小时的数据归为一组。
  • group_by(group_datetime):基于转换后的时间字符串进行分组。
  • summarise(...):对每个分组计算三个变量的均值、最大值、最小值,na.rm = TRUE用于忽略缺失值,避免统计结果出现NA。
  • rename(...):将分组列重命名为datetime,完全匹配你期望的输出表头。
  • arrange(datetime):可选步骤,让结果按时间顺序排列,方便查看。

简化版(适合多变量场景)

如果后续变量增多,可使用across函数减少重复代码:

WaterData <- BUSdata %>%
  left_join(MBdata, by = "datetime") %>%
  left_join(SUSdata, by = "datetime") %>%
  mutate(group_datetime = format(datetime, "%m-%d %H:%M:%S")) %>%
  group_by(group_datetime) %>%
  summarise(
    across(c(BUSwt, MBwt, SUSwt), 
           list(mean = ~mean(., na.rm = TRUE), 
                max = ~max(., na.rm = TRUE), 
                min = ~min(., na.rm = TRUE)))
  ) %>%
  # 调整列名格式(默认是"变量名_函数名",和需求格式一致)
  rename(datetime = group_datetime) %>%
  arrange(datetime)

across函数会自动为每个变量生成变量名_mean、变量名_max、变量名_min格式的列,无需手动逐个定义。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:10:13