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

在R语言中计算与日期无关的分类别事件发生平均时间

实现方案

核心思路是将每个时间点转换为当日0点以来的总秒数,基于总秒数计算均值后再转换为标准时分秒格式,完全剥离日期信息的同时自动处理60进制进位,避免出现非法时间值。

依赖包准备

需要用到dplyr、lubridate做基础时间和数据处理,可选安装hms包简化格式化:

library(dplyr)
library(lubridate)
library(hms)

最简实现代码

summary_times <- df %>%
  group_by(category) %>%
  summarize(avg_time = as.character(as_hms(mean(seconds_since_midnight(times)))))

输出的avg_time为HH:MM:SS格式的字符串,可直接用于表格展示。


无额外依赖的自定义实现

如果不想引入hms包,也可以手动实现秒数到时分秒的转换,还可以灵活控制补零、四舍五入规则:

summary_times <- df %>%
  group_by(category) %>%
  summarize(
    avg_sec = mean(seconds_since_midnight(times)),
    h = avg_sec %/% 3600,
    m = (avg_sec %% 3600) %/% 60,
    s = round(avg_sec %% 60),
    # sprintf自动补前导零,避免出现1:5:3这类格式问题
    avg_time = sprintf("%02d:%02d:%02d", h, m, s)
  ) %>%
  select(category, avg_time)

原方案问题说明

之前单独计算时分秒均值的方案,没有处理时间分量之间的60进制进位规则,比如秒的总和均值超过60时没有向分钟进位,才会出现分、秒数值超过合理范围的非法时间结果,基于总秒数统一计算的方案完全规避了该问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:15:06