【发布时间】:2020-08-01 03:19:15
【问题描述】:
我有两个包含数百万行的数据表,其中有一对 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 来实现这一点?如果没有,是否有任何替代方法可以同样快速地处理数百万行?
【问题讨论】:
标签: r date data.table overlap