Проверка, существует ли значение в векторе дат, которое находится в заданном диапазоне - PullRequest
5 голосов
/ 22 сентября 2019

У меня есть вектор дат, и я хочу проверить на определенную дату, существует ли значение в векторе за 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, что возвращает TRUE.

Однако, для моей проблемы,Я хочу проверить что-то похожее на следующее:

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

Таким образом, для данных, которые я предоставил, результат вернет TRUE, потому что существует дата в пределах 150дней до given_date (например, 2006-03-14 существует в диапазоне (2006-01-07, 2006-06-06)), а другой существует в течение 150 дней до этого (например, 2005-10-04 существуетв пределах (2005-08-10, 2006-01-07)).

Буду признателен за любую помощь относительно того, как я могу сделать это в R!

Ответы [ 3 ]

2 голосов
/ 22 сентября 2019

Проверяет каждое из двух условий, а затем И их.

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

Обновление

Исправлено.

2 голосов
/ 22 сентября 2019

Мы можем использовать between в dplyr или data.table

library(dplyr)
any(between(dates, given_date - 150, given_date)) && 
   any(between(dates, given_date - 300, given_date - 150))
#[1] TRUE
1 голос
/ 22 сентября 2019

Если мы ожидаем только один 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) 
...