用于确定两个日期间隔之间的重叠的R函数--DescTools间隔函数。

问题描述 投票:0回答:1

我正在寻找一种方法来确定两个日期间隔之间的重叠(天数)。 我有列 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,但我不知道有什么函数可以计算它们之间的重叠天数。

任何帮助都是感激的。 先谢谢你

r intervals lubridate desctools
1个回答
0
投票

如果我的理解正确的话,你可以通过简单地减去以下内容来实现这个目标。enddate1startdate2. 你可以用基本的 R 诸如此类的功能 as.Date():

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

该字符串 %m/%d/%Y 指定你的日期格式,在你的例子中是月日年。我在这里添加了 +1 因为上面计算的是日期之间的差额(如 10 - 6 = 4),不包括起始日期,而为了得到重叠,我们要把起始日本身也计算在内。

© www.soinside.com 2019 - 2024. All rights reserved.