У меня есть две таблицы данных с миллионами строк, в которых есть пары IDs
с частичным перекрытием даты. Ниже приведен очень короткий пример:
library(data.table)
dt1 <- data.table(ID=720,
startdate=as.IDate("2000-01-01"),
enddate=as.IDate("2017-10-09"))
dt2 <- data.table(ID=720,
startdate=as.IDate("2000-06-08"),
enddate=as.IDate("2020-04-12"))
Я бы хотел найти перекрывающийся период времени между двумя наборами данных. Я пытаюсь сделать это, используя foverlaps
:
setkey(dt1, ID, startdate, enddate)
setkey(dt2, ID, startdate, enddate)
foverlaps(dt1, dt2, by.x=c("ID", "startdate", "enddate"),
by.y=c("ID", "startdate", "enddate"), type='within', nomatch = 0L)
Empty data.table (0 rows and 5 cols): ID,startdate,enddate,i.startdate,i.enddate
Приведенный выше код возвращает пустую таблицу данных, поскольку диапазон дат в dt1
не является полностью в пределах диапазона дат в dt2
.
Однако я ожидал, что таблица данных с любым диапазоном дат является общей для двух наборов данных, который будет:
ID startdate enddate
1: 720 2000-06-08 2017-10-09
Есть ли в любом случае, чтобы достичь этого с помощью foverlaps
? Если нет, есть ли альтернатива, которая бы работала так же быстро для миллионов строк?