Функция R для определения перекрытия между двумя интервалами дат - Функция интервала DescTools - PullRequest
0 голосов
/ 23 апреля 2020

Я ищу способ определения перекрытия (в днях) между двумя интервалами дат. У меня есть столбцы startdate1, enddate1, startdate2, enddate2. Мне нужен дополнительный столбец с количеством дней перекрытия между интервалами (startdate1, enddate1) и (startdate2, enddate2).
Например, я хочу получить что-то вроде этого:

startdate1      enddate1      startdate2      enddate2      overlap
1/1/2020        1/10/2020     1/6/2020        1/16/2020     5
1/15/2020       1/29/2020     1/6/2020        1/20/2020     6
1/15/2020       1/29/2020     1/17/2020       1/20/2020     4

Я пытался добиться этого с помощью функции Interval из пакета DescTools:

df1$overlap<- Interval(as.Date(c(df1$startdate1, df1$enddate1)), as.Date(c(df1$startdate2, df1$enddate2)))

Но я получаю сообщение об ошибке:

as.Date.numeri c (c (df1 $ startdate1, df1 $ enddate1)): необходимо указать 'origin' "

Я также посмотрел пакет lubridate - я использовал функцию интервала (другую из описанного выше интервала DescTools) для создания столбцов интервал 1 и интервал 2, но я не знаю функции, которая может вычислять дни перекрытия между ними.

Любая помощь приветствуется. Заранее спасибо!

1 Ответ

0 голосов
/ 23 апреля 2020

Если я правильно понимаю, вы можете добиться этого, просто вычтя enddate1 из startdate2. Вы можете сделать это с помощью базовых R функций, таких как as.Date():

as.Date(enddate1, "%m/%d/%Y") - as.Date(startdate2, "%m/%d/%Y") + 1

Строка %m/%d/%Y указывает формат ваших дат в вашем случае месяц / день / год. Я добавляю +1, потому что выше вычисляется разница между датами (например, 10 - 6 = 4), не включая дату начала, в то время как для перекрытия мы хотим также подсчитать сам день начала.

...