将时间间隔向量分配给非重叠组
Assign vector of time intervals to non-overlapping groups
我有 Interval
个由 R 包创建的向量 lubridate
:
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
我想将这个 Inteval
的向量传递给一个函数,并让它 return 一个相同长度的组成员向量,其中组成员由重叠的时间间隔决定。在此示例中,returned 向量将是:
c(1, 1, 2, 3, 3)
lubridate
能够评估间隔对与 int_overlaps
的重叠,但我希望有人已经将其概括为识别非重叠间隔组。
我们可以使用 lubridate
中的 int_overlaps
。这个想法是检查当前和之前的间隔之间是否有任何重叠 (lag
) 到 return 一个逻辑向量,我们用 cumsum
[=15 将其转换为整数=]
library(lubridate)
library(dplyr)
cumsum(!int_overlaps(ints, lag(ints, default = first(ints)))) + 1
#[1] 1 1 2 3 3
我有 Interval
个由 R 包创建的向量 lubridate
:
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
我想将这个 Inteval
的向量传递给一个函数,并让它 return 一个相同长度的组成员向量,其中组成员由重叠的时间间隔决定。在此示例中,returned 向量将是:
c(1, 1, 2, 3, 3)
lubridate
能够评估间隔对与 int_overlaps
的重叠,但我希望有人已经将其概括为识别非重叠间隔组。
我们可以使用 lubridate
中的 int_overlaps
。这个想法是检查当前和之前的间隔之间是否有任何重叠 (lag
) 到 return 一个逻辑向量,我们用 cumsum
[=15 将其转换为整数=]
library(lubridate)
library(dplyr)
cumsum(!int_overlaps(ints, lag(ints, default = first(ints)))) + 1
#[1] 1 1 2 3 3