Arhn - архитектура программирования

Как вычислить перекрывающиеся временные интервалы между группами

У меня есть кадр данных с идентификатором группы, временем начала и временем окончания. Я хотел бы вычислить перекрывающийся интервал времени между группами. Вот пример набора данных;

id <- c("a","a","b","c","c")
start_time <-as.POSIXct(c("2016-05-27 09:30:00","2016-05-27 15:30:00",
                          "2016-05-27 14:30:00","2016-05-27 09:40:00","2016-05-27 15:00:00"),tz= "UTC")
end_time <-as.POSIXct(c("2016-05-27 10:30:00","2016-05-27 17:30:00",
                        "2016-05-27 16:30:00","2016-05-27 09:50:00","2016-05-27 16:00:00"),tz= "UTC")

df <- data.frame(id,start_time,end_time)

и пример кадра данных выглядит так:

            ID             start_time           end_time
1           a        2016-05-27 09:30:00    2016-05-27 10:30:00
2           a        2016-05-27 15:30:00    2016-05-27 17:30:00
3           b        2016-05-27 14:30:00    2016-05-27 16:30:00
4           c        2016-05-27 09:40:00    2016-05-27 09:50:00
5           c        2016-05-27 15:00:00    2016-05-27 16:00:00

Желаемый результат от предлагаемого фрейма данных:

            ID_1             ID_2        overlap
1           a                 b         0 + 60 mins
2           a                 c        10 + 0 + 0 + 30 mins
3           b                 c         0 + 60 mins

Последний столбец не обязательно должен отображать все случаи. Это просто, чтобы помочь вам понять. Можно ли в любом случае вычислить общее время перекрытия между группами путем сравнения всех временных интервалов?

29.04.2021

Ответы:


1

Вот оно:



library(magrittr)
library(lubridate)
library(tidyr)

df %<>% mutate( interval = interval( start_time, end_time ) )

df %>% full_join( df, by=character(), suffix=c("_1","_2") ) %>%
    mutate( overlap = lubridate::intersect( interval_1, interval_2 ) ) %>%
    filter( id_1 < id_2 ) %>%
    replace_na( list(overlap=0) ) %>%
    group_by( id_1, id_2 ) %>%
    summarise( overlap = paste(paste( as.numeric( overlap ) / 60, collapse=" + " ),"mins"))

различные функции смазки являются ключевыми для решения, остальное — просто инфраструктура

Выход:


  id_1  id_2  overlap              
  <chr> <chr> <chr>                
1 a     b     0 + 60 mins          
2 a     c     10 + 0 + 0 + 30 mins
3 b     c     0 + 60 mins  

29.04.2021
  • обратите внимание, что в ваших входных данных, вероятно, есть опечатка, там написано 2015 год в строке 2 end_time, наверняка должен быть 2016 год. 30.04.2021
  • Спасибо за такой отличный ответ и обнаружение опечатки! Исправляю опечатку. Я боролся с этим, так как не был знаком с функциями смазки. То, что я на самом деле просил для последнего столбца, заключалось в том, чтобы получить сумму значений, но я думаю, что справлюсь с этим. Спасибо @Sirius! 30.04.2021
  • Пока я запускал код, я получил сообщение об ошибке, в котором говорилось: «Ошибка: by необходимо указать переменные для присоединения. Я что-то пропустил в коде? 30.04.2021
  • Возможно, придется обновить dplyr, чтобы разрешить присоединение к пустому символу(), что здесь является ключевым. 30.04.2021
  • Спасибо за быстрый и точно правильный комментарий к вопросу. Я исправил проблему! 30.04.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..