润滑间隔中的总唯一时间总和

Sum total unique time in lubridate intervals

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

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

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

您可以 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))
}