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

如何用lubridate的%within%函数实现24小时逐区间时间戳匹配

R语言实现整点小时区间与时间戳范围匹配校验

我们需要校验1小时间隔是否处于对应id的timestamp1和timestamp2之间,lubridate库的%within%函数可实现该能力,但要求为每个id及其对应的时间戳对执行24次校验(覆盖0:00:000至23:00:000的所有整点区间),最终每个id需输出24个取值为TRUE或FALSE的结果。

示例数据(来自Merijn van Tilborg的解决方案)

library(lubridate)
id <- c(1, 2 ,3 ,4 ,5)
timestamp1 <- structure(c(1618725826, 1618808778, 1618981628, 1619070713, 1619070218
), class = c("POSIXct", "POSIXt"), tzone = "")

timestamp2 <- structure(c(1618745800, 1618819480, 1618999145, 1619082202, 1619081591
), class = c("POSIXct", "POSIXt"), tzone = "")

参考实现代码

results <- lapply(id, function(id) {
 matching_hours[as.POSIXlt(timestamp1[id])$hour:as.POSIXlt(timestamp2[id])$hour] <- T
 data.table(t(matching_hours))
})

results <- rbindlist(results)

运行结果示例

#        0     1     2     3     4     5     6    7    8    9    10    11    12    13    14    15    16    17    18    19    20    21    22    23
# 1: FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 2: FALSE FALSE FALSE FALSE FALSE FALSE  TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 3: FALSE FALSE FALSE FALSE FALSE FALSE  TRUE TRUE TRUE TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 4: FALSE FALSE FALSE FALSE FALSE FALSE  TRUE TRUE TRUE TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 5: FALSE FALSE FALSE FALSE FALSE FALSE  TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

输出的结果中,每行对应一个id,每列对应0到23点的整点小时区间,布尔值标识对应整点区间是否处于该id的timestamp1和timestamp2范围内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:54:00