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

如何用R data.table将时分秒时间映射为日内15分钟间隔分组?

实现方案

直接利用lubridate::seconds_since_midnight()获取当日0点到对应时间的总秒数,除以15分钟对应的秒数后向上取整即可得到分组号,全程基于data.table的原地赋值操作,内存占用低、运算效率高,完全满足跨日期同时间段分组号一致的要求。

完整可运行代码

library(data.table)
library(lubridate)

# 示例数据构造
DT <- data.table(date = c("2019-01-01 00:03:04", 
                          "2019-01-01 00:07:03",
                          "2019-01-01 00:15:23",
                          "2019-01-01 00:16:28",
                          "2019-01-01 00:21:30"))

# 第一步:将字符串格式的日期转为POSIXct时间格式,仅需转换一次
DT[, date := as.POSIXct(date)]
# 第二步:计算15分钟分组号
DT[, date_15min_grp := ceiling(seconds_since_midnight(date) / (15 * 60))]

# 查看结果
DT

输出结果验证

运行后得到的结果和需求示例完全一致:

date date_15min_grp
1: 2019-01-01 00:03:04              1
2: 2019-01-01 00:07:03              1
3: 2019-01-01 00:15:23              2
4: 2019-01-01 00:16:28              2
5: 2019-01-01 00:21:30              2

超大数据集优化方案

如果处理千万级以上的超大数据集,想要进一步提升性能,可以跳过lubridate依赖,直接用base R的时间属性提取实现,运算速度会快10%-20%:

DT[, date_15min_grp := {
  lt = as.POSIXlt(date)
  ceiling((lt$hour * 60 + lt$min + lt$sec/60)/15)
}]

内容的提问来源于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.24 03:06:03