检查日期向量中是否存在给定范围内的值
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
更新
已修复。
我们可以在dplyr
或data.table
中使用between
library(dplyr)
any(between(dates, given_date - 150, given_date)) &&
any(between(dates, given_date - 300, given_date - 150))
#[1] TRUE
我有一个日期向量,想检查某个日期,向量中是否存在该日期前 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
更新
已修复。
我们可以在dplyr
或data.table
between
library(dplyr)
any(between(dates, given_date - 150, given_date)) &&
any(between(dates, given_date - 300, given_date - 150))
#[1] TRUE