我正在寻找一种方法来确定两个日期间隔之间的重叠(天数)。 我有列 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$startdate1, df1$enddate1)) : 必须提供'origin'"。
我还研究了lubridate包--我使用间隔函数(与上面的DescTools Interval不同)来创建列interval1和interval2,但我不知道有什么函数可以计算它们之间的重叠天数。
任何帮助都是感激的。 先谢谢你
如果我的理解正确的话,你可以通过简单地减去以下内容来实现这个目标。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
),不包括起始日期,而为了得到重叠,我们要把起始日本身也计算在内。