У меня очень большой набор данных временных интервалов (начальная и конечная значения даты), и мне необходимо рассчитать для каждого отдельного дня во всем диапазоне этих дат, сколько интервалов включает в себя дату.
По сути, я хочу знать, сколько людей в тюрьме в любой день. Я когда они вошли, и когда они ушли. Мне нужно иметь возможность определить, сколько человек находилось в тюрьме каждый день в течение многих лет.
Пример данных:
require(tidyverse)
require(lubridate)
x <- tribble(~start, ~end,
today()-5, today()-3,
today()-4, today()-2,
today()-3, today()-1)
x <- x %>% mutate(dtint = interval(start, end))
x
#> # A tibble: 3 x 3
#> start end dtint
#> <date> <date> <Interval>
#> 1 2019-10-13 2019-10-15 2019-10-13 UTC--2019-10-15 UTC
#> 2 2019-10-14 2019-10-16 2019-10-14 UTC--2019-10-16 UTC
#> 3 2019-10-15 2019-10-17 2019-10-15 UTC--2019-10-17 UTC
mydays <- seq(min(x$start), max(x$end), by = "day") %>% enframe(name = NULL, value = "eachday")
mydays
#> # A tibble: 5 x 1
#> eachday
#> <date>
#> 1 2019-10-13
#> 2 2019-10-14
#> 3 2019-10-15
#> 4 2019-10-16
#> 5 2019-10-17
#Expected result:
mydays %>% add_column(expected_result = c(1, 2, 3, 2, 1))
#> # A tibble: 5 x 2
#> eachday expected_result
#> <date> <dbl>
#> 1 2019-10-13 1
#> 2 2019-10-14 2
#> 3 2019-10-15 3
#> 4 2019-10-16 2
#> 5 2019-10-17 1
Создано в 2019-10-18 с помощью пакета представить (v0.3.0)
Мне также понадобится возможность сделать это на сгруппированных столбцах, чтобы можно было вычислять такие вещи, как итоги по демографическим свойствам.
Есть ли эффективный способ сделать это в tidyverse / lubridate?