【问题标题】:Sum total unique time in lubridate intervals润滑间隔中的总唯一时间
【发布时间】:2021-09-27 10:06:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: r time intervals lubridate


    【解决方案1】:

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

    【讨论】:

    • 这对我的具体示例非常有效。有没有一种方法也适用于间隔不重叠并且它们之间有间隙的情况?这种方法包括间隔时间。
    • 添加了更通用的解决方案。
    • 谢谢!非常感谢您的帮助。
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多