【问题标题】:Assign vector of time intervals to non-overlapping groups将时间间隔向量分配给非重叠组
【发布时间】:2020-10-14 19:40:52
【问题描述】:

我有由 R 包 lubridate 创建的 Intervals 向量:

library(lubridate)
ints <- new("Interval", .Data = c(61379.0158998966, 61379.0158998966, 
                                  174450.142500162, 2105574.12809992, 
                                  1986079.47369981), 
            start = structure(c(1477895188.5302, 1477895188.5302, 
                                1478301991.7993, 1478488100.319, 
                                1478607594.9734), 
                              tzone = "America/New_York", class = c("POSIXct", "POSIXt")), 
            tzone = "America/New_York")
ints
#> [1] 2016-10-31 02:26:28 EDT--2016-10-31 19:29:27 EDT
#> [2] 2016-10-31 02:26:28 EDT--2016-10-31 19:29:27 EDT
#> [3] 2016-11-04 19:26:31 EDT--2016-11-06 18:54:01 EST
#> [4] 2016-11-06 22:08:20 EST--2016-12-01 07:01:14 EST
#> [5] 2016-11-08 07:19:54 EST--2016-12-01 07:01:14 EST

我想将这个Intevals 向量传递给一个函数,让它返回一个相同长度的组成员向量,其中组成员由重叠的时间间隔确定。在本例中,返回的向量为:

c(1, 1, 2, 3, 3)

lubridate 能够评估间隔对与int_overlaps 的重叠,但我希望有人已经对此进行了概括,以识别非重叠间隔组。

【问题讨论】:

    标签: r intervals lubridate


    【解决方案1】:

    我们可以使用lubridate 中的int_overlaps。这个想法是检查当前和前一个(lag)的间隔之间是否有任何重叠,以返回一个逻辑向量,我们将其转换为整数 cumsum

    library(lubridate)
    library(dplyr)
    cumsum(!int_overlaps(ints, lag(ints, default = first(ints)))) + 1
    #[1] 1 1 2 3 3
    

    【讨论】:

    • 完美!谢谢!
    猜你喜欢
    • 2019-09-14
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多