Я пытаюсь объединить перекрывающиеся интервалы, чтобы вычислить сумму уникальных интервалов при удалении исключенных интервалов.
Вот минимальный рабочий пример:
mydata <- data.frame(interval = c(1,2,3,4,5,6,7,8,9,10),
timeoutStart = c(280,500,NA,NA,NA,NA,NA,NA,NA,NA),
timeoutEnd = c(310,530,NA,NA,NA,NA,NA,NA,NA,NA),
cheeringStart = c(1,181,205,330,460,740,NA,NA,NA,NA),
cheeringEnd = c(120,199,300,420,475,760,NA,NA,NA,NA),
possessionStart = c(80,180,210,250,350,450,550,650,750,800),
possessionEnd = c(130,200,220,280,400,499,600,700,800,950)
)
interval timeoutStart timeoutEnd cheeringStart cheeringEnd possessionStart possessionEnd
1 280 310 1 120 80 130
2 500 530 181 199 180 200
3 NA NA 205 300 210 220
4 NA NA 330 420 250 280
5 NA NA 460 475 350 400
6 NA NA 740 760 450 499
7 NA NA NA NA 550 600
8 NA NA NA NA 650 700
9 NA NA NA NA 750 800
10 NA NA NA NA 800 950
В минимальном рабочем примере вышеЯ хотел бы подсчитать общее время, которое команда проводит за аплодисменты или владеет мячом (исключая тайм-ауты).Значения в матрице представляют время начала и окончания (секунды, прошедшие с начала игры) различных интервалов для каждого результата (timeout
, cheering
или possession
).Результаты не являются взаимоисключающими и могут происходить одновременно.Однако я не хочу «пересчитывать» перекрывающиеся интервалы cheering
и possession
.То есть я хочу объединить перекрывающиеся интервалы cheering
и possession
, чтобы я мог суммировать «уникальные» интервалы.
Например, один интервал аплодисментов происходит от 740 до 760 секунд, тогда какинтервал владения перекрывается с этим интервалом (от 750 до 800 секунд).Интервал объединения составит от 740 до 800 секунд (продолжительность = 60 секунд).
После объединения перекрывающихся интервалов для cheering
и possession
я хочу исключить интервалы тайм-аута.Например, для уникального интервала от 205 до 300 секунд я хочу исключить интервал ожидания от 280 до 310 секунд.Таким образом, уникальный интервал, исключающий интервал времени ожидания, будет от 205 до 280 секунд (продолжительность = 75 секунд).
Я хочу рассчитать продолжительность каждого уникального интервала (End
- Start
), исключая интервалы времени ожиданияи затем вычислите сумму всех этих уникальных интервалов (исключая интервалы времени ожидания).Наконец, я хотел бы иметь возможность включать или исключать интервалы из расчета на основе значения другой переменной (keep
= 0 или 1) в этой строке.
Давайте предположим, что Start
и End
столбцы времени предварительно не отсортированы.Я также хотел бы, чтобы подход был обобщаемым, чтобы можно было легко добавлять несколько дополнительных наборов столбцов для включения в сумму (например, дриблинг, прохождение и т. Д.).Я посмотрел на другие ответы, но не нашел способа обобщить их решения для моей ситуации.