Определить перекрывающиеся даты по группе с помощью R - PullRequest
1 голос
/ 21 апреля 2020

С учетом набора данных

enter image description here

structure(list(intervention = c("Self Isolation", "Lockdown Low", 
"Lockdown Low", "Self Isolation", "Social Distancing", "Lockdown Low", 
"Social Distancing", "Handwashing"), date_start = structure(c(17897, 
17957, 18444, 17987, 17897, 17532, 17942, 18018), class = "Date"), 
    date_end = structure(c(17956, 18262, 18475, 18017, 17956, 
    18053, 18017, 18048), class = "Date")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -8L))

Как я могу проверить, имеет ли какое-либо "вмешательство" перекрывающиеся даты? В этом примере все вмешательства хороши , но"Социальное дистанцирование" и "Низкий уровень блокировки"

Идеальным выходом будет кадр данных с одним вмешательством на строку и столбцом, заполненным TRUE / FALSE в зависимости от того, есть ли какое-либо совпадение для вмешательства.

enter image description here

(Дополнительные баллы за решение проблемы приливов и отливов).

1 Ответ

1 голос
/ 21 апреля 2020

Мы можем сделать summarise

library(dplyr)
df1 %>%
    arrange(intervention, date_start, date_end) %>% 
    group_by(intervention) %>%
    summarise(overlapping = any(date_start < lag(date_end, 
         default = first(date_end)) & row_number() != 1))
# A tibble: 4 x 2
#  intervention      overlapping
#  <chr>             <lgl>      
#1 Handwashing       FALSE      
#2 Lockdown Low      TRUE       
#3 Self Isolation    FALSE      
#4 Social Distancing TRUE       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...