检查日期向量中是否存在给定范围内的值

Checking if there exists a value in vector of dates that lies within a given range

我有一个日期向量,想检查某个日期,向量中是否存在该日期前 150 天内的值,以及之前 150 天的值。我的数据的一个简单示例如下所示:

given_date <- as.Date('2006-06-06')
dates <- as.Date(c("2005-02-22", "2005-04-26", "2005-08-02", "2005-10-04", "2005-12-06", "2006-03-14", "2006-06-06"))

我知道在某个日期我可以做 given_date %in% dates,returns TRUE

但是,对于我的问题,我想检查如下内容:

ifelse(range(given_date-1, given_date-150) %in% dates & range(given_date-151, given_date-300) %in% dates, TRUE, FALSE)

因此对于我提供的数据,结果将是 return TRUE 因为在 given_date 之前的 150 天内存在一个日期(例如 2006-03-14 存在于 given_date 之前(2006-01-07, 2006-06-06) 的范围), 以及之前 150 天内存在的另一个 (例如 2005-10-04 存在于 (2005-08-10, 2006-01) 的范围内-07)).

对于我如何在 R 中执行此操作的任何帮助,我将不胜感激!

如果我们希望只有一个 TRUE/FALSE 作为输出,那么在创建逻辑向量

之后用 any 换行
i1 <- seq(given_date, length.out = 150, by = "-1 day") %in% dates 
i2 <- seq(given_date - 150, length.out = 150, by = "1 day") %in% dates
any(i1) & any(i2) 

这会检查两个条件中的每一个,然后对它们进行与运算。

any( dates >= given_date - 150 & dates < given_date ) &
  any( dates >= given_date - 300 & dates < given_date - 150 ) 
## [1] TRUE

更新

已修复。

我们可以在dplyrdata.table

中使用between
library(dplyr)
any(between(dates, given_date - 150, given_date)) && 
   any(between(dates, given_date - 300, given_date - 150))
#[1] TRUE