r - 使用 R 测试日期是否出现在多个日期范围内

标签 r date intervals date-arithmetic

我有一个具有多个日期范围的数据框(准确地说是 45):

Range  Start       End
1      2014-01-01  2014-02-30
2      2015-01-10  2015-03-30
3      2016-04-20  2016-10-12
...    ...         ...

他们永远不会重叠

我还有一个包含各种事件日期(200K+)的数据框:
Event  Date
1      2014-01-02
2      2014-03-20
3      2015-04-01
4      2016-08-18
...    ...

我想测试这些日期是否在以下任何范围内:
Event  Date        InRange
1      2014-01-02  TRUE
2      2014-03-20  FALSE
3      2015-04-01  FALSE
4      2016-08-18  TRUE
...

执行此测试的最佳方法是什么?我看过lubridate的之间 间隔函数以及各种 Stackoverflow 问题,但找不到好的解决方案。

最佳答案

您可以从第一个数据框创建日期范围的向量,然后使用 %in%运算符来检查您的事件的每个日期是否在此日期范围内。假设您的第一个数据框是 dateRange ,第二个 events ,将上述逻辑放在一行中将是:

events$InRange <- events$Date %in% unlist(Map(`:`, dateRange$Start, dateRange$End))

events
  Event       Date InRange
1     1 2014-01-02    TRUE
2     2 2014-03-20   FALSE
3     3 2015-04-01   FALSE
4     4 2016-08-18    TRUE

我们在哪里使用 Map创建日期范围向量。 Map结合 :运算符从 Start 创建日期范围列表到 End .某处靠近 list(2014-01-01 : 2014-02-30, 2015-01-10 : 2015-03-30, 2016-04-20 : 2016-10-12 ...) (象征性地,无效),带有 unlist ,我们将其展平为日期范围的向量,然后可以与 %in% 一起使用方便。

关于r - 使用 R 测试日期是否出现在多个日期范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933800/

相关文章:

r - 结合两个不相等的数据集来计算比例

r - 在 R 中,如何将数据帧的某些行与某些逻辑相加?

algorithm - 在 O(nlog(n)) 中查找 "maximum"重叠区间对

algorithm - 基于端点递归连接间隔列表

r - 在Azure虚拟机中设置R Shiny 服务器

R 更新 |版本不匹配

php - 谷歌图表显示表单输入之外的可视化

python - 如何在python中加入整数区间?

r - 有效地生成两个日期之间的时间和日期的随机样本

java - 在 Freemarker 中打印日期天数差异时出错