我正在寻找一种方法来确定两个日期间隔之间的重叠(以天为单位)。我有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我一直试图通过DescTools包中的Interval函数来实现这一点:
df1$overlap<- Interval(as.Date(c(df1$startdate1, df1$enddate1)), as.Date(c(df1$startdate2, df1$enddate2)))但我得到了错误:
as.Date.numeric(c(df1 1$startdate1,df1 1$enddate1)):必须提供“原产地”
我还研究了lubridate包--我使用了interval函数(不同于上面的DescTools区间)来创建列interval1和interval2,但是我不知道有一个函数可以计算它们之间重叠的天数。
任何帮助都是非常感谢的。提前感谢!
发布于 2020-04-22 22:05:06
如果我正确理解,您可以通过从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),不包括开始日期,而为了得到重叠,我们也要计算开始日期本身。
https://stackoverflow.com/questions/61375608
复制相似问题