计算R中的时间戳重叠

时间:2019-06-18 14:47:44

标签: r timestamp overlap

我想使用“重叠”功能计算两个时间戳范围之间的重叠。并保存是否存在重叠以及数据表中重叠的间隔。

尝试使用此代码,尝试使用该功能以了解其工作原理。

> a = c(as.Date("2012-01-03 18:00:00"), as.Date("2012-02-03 18:00:00"))
> b = c(as.Date("2012-02-01 19:00:00"), as.Date("2012-03-03 18:00:00"))
> Overlap(a,b)
[1] 2

问题在于仅考虑天数而不考虑时间。我也想利用时间。

1 个答案:

答案 0 :(得分:0)

在考虑时间时,我们可以应用as.POSIXct,而不是as.Date

a <- as.POSIXct(c("2012-01-03 18:00:00", "2012-02-03 18:00:00"))
b <- as.POSIXct(c("2012-02-01 19:00:00", "2012-03-03 18:00:00"))

as.POSIXct转换为numeric时,我们得到秒;证明:

as.POSIXct(as.numeric(a), origin="1970-01-01")  # origin is mostly "1970-01-01"
# [1] "2012-01-03 18:00:00 CET" "2012-02-03 18:00:00 CET"

这样,我们可以计算intersecta中的b,取range,然后将其转换回as.POSIXct以得到重叠。

as.POSIXct(range(intersect(as.numeric(a)[1]:as.numeric(a)[2], 
                           as.numeric(b)[1]:as.numeric(b)[2])), origin="1970-01-01")
# [1] "2012-02-01 19:00:00 CET" "2012-02-03 18:00:00 CET"

这也可以与您的Overlap()函数一起使用(未经测试)。