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

基于起止时间计算班次重叠时长的高效data.table解决方案

高效计算员工班次重叠时长的data.table方案

原始数据集

首先构造示例数据集:

library(data.table)

DT <- data.table(emp = c(1,2,3),
                 start_time = c(90,90,540),
                 duration = c(480, 480,480 ))

DT[, end_time := start_time + duration]

数据集内容:

emp   start_time duration end_time
   <num>      <num>    <num>    <num>
1:     1         90      480      570
2:     2         90      480      570
3:     3        540      480     1020

需求说明

emp为员工ID,start_time/end_time分别是班次的开始/结束时间(分钟)。需要计算每位员工与其他所有员工的班次重叠分钟数,输出格式如下:

emp emp_1 emp_2 emp_3
   <num> <num> <num> <num>
1:     1   480   480    30
2:     2   480   480    30
3:     3    30    30   480

data.table解决方案

# 生成所有员工的两两配对(含自身)
DT_pair <- DT[DT, on = .(), allow.cartesian = TRUE]

# 计算每对的重叠时长:取两个班次的结束时间最小值减去开始时间最大值,负数则取0
DT_pair[, overlap := pmax(0, pmin(end_time, i.end_time) - pmax(start_time, i.start_time))]

# 转换为宽格式,列名格式为emp_XXX
result <- dcast(DT_pair, emp ~ paste0("emp_", i.emp), value.var = "overlap")

运行后即可得到目标格式的结果。该方案利用data.table的高效连接和重塑功能,即使面对大量员工数据也能保持良好性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:56:04