【问题标题】:Find if a date in a date vector falls between two dates查找日期向量中的日期是否介于两个日期之间
【发布时间】:2017-05-30 06:46:03
【问题描述】:

我有两个日期向量,a 和 b。向量 a 有两个定义日期跨度的日期。向量 b 可以有很多元素,但我想知道 b 的哪个(如果有)元素落在 a 的日期范围内。例如,

 a <- c(as.Date("2012-01-01"), as.Date("2012-02-01"))
 b <- c(as.Date("2011-11-09"), as.Date("2012-01-15"), as.Date("2012-5-15"))

向量 a 和 b 可以是 zoo/xts 对象,其为日期分配了数值,或者不是帮助解决方案所需的。

所需的答案是 b[2], 2012-01-15。显然可以使用循环,但必须有一个向量解决方案。帮助表示赞赏。

【问题讨论】:

标签: r vector


【解决方案1】:

我们也可以使用betweenfrom dplyr。顾名思义,between 给出了介于两个值之间的值(这里是a[1]a[2])。

library(dplyr)
b[between(b, a[1], a[2])]

#[1] "2012-01-15"

或者如果我们对基础 R 解决方案感兴趣,最简单的方法是

b[b > a[1] & b < a[2]]

#[1] "2012-01-15"

【讨论】:

    【解决方案2】:

    使用lubridate 可以轻松完成,例如:

    library(lubridate)
    

    我们先定义一个区间a

    a <- as.interval(a)
    

    然后使用%within% 函数我们评估b 的任何元素是否属于a

    b[b %within% a]
    
    [1] "2012-01-15"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      相关资源
      最近更新 更多