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

如何按星期(非具体日期)和小时分组统计读数,得到7*24个分组?

R语言按星期几、小时分组统计实现方案

核心思路

  • 用lubridate的wday()函数提取时间对应的星期几,支持自定义周起始日、返回文本/数值格式结果
  • 用lubridate的hour()函数提取时间对应的当日小时(取值范围0-23)
  • 分组统计后补全所有7*24种组合,确保没有读数、计数为0的分组也能保留

完整实现代码

library(lubridate)
library(dplyr)
library(tidyr) # 用于补全缺失的分组

# 示例数据构造
readings <- ymd_hms(c("2018-01-05 12:00:15", "2018-01-01 02:00:15", "2018-02-25 12:00:15", 
                      "2018-04-15 11:00:15", "2020-10-15 10:00:15", "2019-10-20 08:00:15",
                      "2019-11-15 02:01:15", "2018-11-02 11:00:15", "2018-07-09 02:00:15",
                      "2020-10-02 01:00:15", "2020-01-29 02:00:15", "2019-03-15 07:00:15")
)
tbl <- tibble(readings)

# 统计流程
stat_result <- tbl %>%
  mutate(
    # 提取星期:label=T返回星期标签,week_start=1设置周一为每周第一天,可按需调整
    weekday = wday(readings, label = TRUE, abbr = FALSE, week_start = 1),
    # 提取小时
    hour = hour(readings)
  ) %>%
  group_by(weekday, hour) %>%
  summarise(count = n(), .groups = "drop") %>%
  # 补全所有7*24的分组组合,缺失分组的计数填充为0
  complete(weekday, hour = 0:23, fill = list(count = 0))

补充说明

如果需要显示中文星期标签,运行代码前先设置本地语言环境:
Mac/Linux系统运行Sys.setlocale("LC_TIME", "zh_CN.UTF-8")
Windows系统运行Sys.setlocale("LC_TIME", "Chinese")

  • 最终输出的stat_result共168行(7天24小时),完全符合724的分组要求
  • 如果不需要保留计数为0的分组,删除最后一行complete()相关代码即可
  • 调整wday()的week_start参数可以修改一周的起始日,比如设置week_start=7就会以周日为每周第一天

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:12:01