首页 > 解决方案 > 润滑间隔中的总唯一时间

问题描述

我有多个间隔,我想知道它们代表了多少时间。问题是我的间隔重叠。这是一个基本的例子。想象一下,我有一个从一小时前开始并运行到现在一小时的时间间隔,而我有另一个从现在开始并运行两个小时的时间间隔。每个间隔为 2 小时。因为它们重叠,所以它们总共描述了 3 个小时。

library(lubridate)
interval1 <- interval(Sys.time() - hours(1), Sys.time() + hours(1))
interval2 <- interval(Sys.time(), Sys.time() + hours(2))

有没有办法对多个间隔表示的总唯一时间求和?在这个例子中我想要的答案是 3 小时。

标签: rtimeintervalslubridate

解决方案


你可以union这两个间隔并计算长度:

library(lubridate)

interval1 <- interval(Sys.time() - hours(1), Sys.time() + hours(1))
interval2 <- interval(Sys.time(), Sys.time() + hours(2))

my_interval <- union(interval1, interval2)

as.duration(my_interval)
# "10800.9256539345s (~3 hours)"

如果间隔不一定重叠,您可以添加两个间隔的长度并减去两者的交集:

if (is.na(intersect(interval1, interval2))) {
  as.duration(interval1) + as.duration(interval2)
} else {
  as.duration(interval1) + as.duration(interval2) - as.duration(intersect(interval1, interval2))
}

推荐阅读