195  :時間の集計3

library(tidyverse)
library(lubridate)
{
  dat <- read_csv("data/time.csv")
  
  dat <- dat |> 
    slice(1:5) |> 
    select(start,end)
  
  dat %>%
    arrange(start) %>% 
    mutate(interv = interval(start, end)) %>% 
    mutate(
      prev_overlap = int_overlaps(interv, lag(interv)),
      prev_nextday = int_overlaps(interv, int_shift(lag(interv),days(1))),
    ) %>%
    mutate(prev_oa = prev_overlap | prev_nextday) %>% 
    replace_na(list(prev_oa = FALSE)) %>% 
    mutate(presc_id = cumsum(!prev_oa)) %>%
    group_by(presc_id) %>% 
    summarise(start = min(start), end = max(end))

  
}
Rows: 400 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr  (1): med
dbl  (1): id
date (2): start, end

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# A tibble: 3 × 3
  presc_id start      end       
     <int> <date>     <date>    
1        1 2020-04-01 2020-04-09
2        2 2020-04-14 2020-05-07
3        3 2020-05-12 2020-08-01