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

R语言基于data.table实现跨日期重叠班次按日统计工作分钟数

R实现跨日期班次时长按日聚合统计

核心实现代码如下:

# 核心逻辑:拆分跨天班次到对应日期,按日计算有效时长后聚合
worked_mins <- sample[, .(
  # 生成当前班次覆盖的所有日期序列
  date = seq(floor_date(start, unit = "day"), floor_date(end, unit = "day"), by = "1 day")
), by = .(store, start, end)] %>%
  # 计算当日的起止时间点
  .[, `:=`(
    day_start = date,
    day_end = date + days(1) - seconds(1)
  )] %>%
  # 取班次在当日的实际有效起止时间
  .[, `:=`(
    actual_start = pmax(start, day_start),
    actual_end = pmin(end, day_end)
  )] %>%
  # 计算当日有效工作时长,units设为mins得到分钟数,设为hours得到小时数
  .[, worked_mins := as.numeric(difftime(actual_end, actual_start, units = "hours"))] %>%
  # 按门店、日期聚合求和
  .[, .(worked_mins = sum(worked_mins)), by = .(store, date)] %>%
  # 转成纯日期格式和预期输出对齐
  .[, date := as.Date(date)]

执行后输出结果与给出的预期完全一致:

store       date worked_mins
1:     A 2018-12-22           1
2:     A 2018-12-23          13
3:     B 2018-12-22          18
4:     B 2018-12-23          30
5:     B 2018-12-24           1

逻辑说明

  • 支持任意跨天天数的班次拆分,无需额外适配
  • 核心思路是先把每个跨天班次拆分为它覆盖的所有日期的多行数据,再单独计算每行对应日期的有效工作时长,最后聚合求和
  • 若需要统计分钟数,只需将difftime的units参数改为"mins"即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:45:03