You need to enable JavaScript to run this app. R语言中如何按日内时段分组数据并统计各时段事件频次
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何按日内时段分组数据并统计各时段事件频次

R语言日内时段分组与事件频次统计实现

整体流程为:标准化Time列的时间格式,提取观测时间对应的小时值,按照给定规则映射为对应时段标签,最后按时段分组统计事件数量,全程仅需原始数据中的Time列即可完成计算。

推荐实现(tidyverse 生态)

这种写法逻辑清晰、易调整规则,是日常数据分析的常用方案。

  1. 先复现输入示例数据:
    df <- data.frame(
      Date = rep("21/10/20", 7),
      Time = c("03:49:19","05:39:23","09:23:10","14:38:50","17:17:48","21:23:45","21:49:32")
    )
    
  2. 加载依赖包,完成全流程计算:
    library(dplyr)
    library(lubridate)
    
    period_result <- df |>
      mutate(
        # 把字符串格式的Time转成标准时间类型,提取小时数
        hour_value = hour(hms::as_hms(Time)),
        # 按规则映射时段
        Period = case_when(
          hour_value %in% 0:9 ~ "Morning",
          hour_value %in% 10:17 ~ "Afternoon",
          hour_value %in% 18:23 ~ "Evening"
        )
      ) |>
      # 按时段分组计数,指定输出列名
      count(Period, name = "Count")
    
  3. 输出结果和目标格式完全一致:
    PeriodCount
    Morning3
    Afternoon2
    Evening2

无依赖实现(基础R版本)

不想安装第三方包的场景下,可以直接用基础函数完成计算:

# 从标准格式的Time字符串中提取小时值
df$hour_value <- as.integer(substr(df$Time, 1, 2))
# 按小时区间映射时段标签
df$Period <- cut(
  x = df$hour_value,
  breaks = c(-1, 9, 17, 23),
  labels = c("Morning", "Afternoon", "Evening")
)
# 统计频次并对齐目标表格结构
period_result <- as.data.frame(table(df$Period))
colnames(period_result) <- c("Period", "Count")

规则匹配校验

两套方案的区间划分完全贴合给定的时段边界,不会出现错配:

  • 所有小时值在0-9的观测(对应00:00:00-09:59:59),全部归入Morning组
  • 所有小时值在10-17的观测(对应10:00:00-17:59:59),全部归入Afternoon组
  • 所有小时值在18-23的观测(对应18:00:00-23:59:59),全部归入Evening组

实用提示:如果原始Time列存在非补零格式(比如9:23:10而非09:23:10),不要直接用substr截取字符串,必须先通过hms::as_hms()做格式标准化后再提取小时值,避免解析出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 03:45:03