Проверьте, находится ли дата в диапазоне таблицы поиска - PullRequest
0 голосов
/ 13 октября 2018

У меня есть набор данных, который выглядит следующим образом:

library(data.table)
library(magrittr)

Data1 <- data.table(
  ID_a = c(1, 1, 2, 1, 2),
  ID_b = c(1, 1, 1, 2, 2),
  Date_1 = c("2018-01-01", "2018-05-01", "2018-07-01", "2018-09-01", "2018-10-01") %>% 
    as.Date
)

Две переменные ID_a и ID_b являются переменными ID.Теперь у меня есть другой набор данных, который выглядит следующим образом:

Data2 <- data.table(
  ID_a = c(1, 1, 2, 1, 2),
  ID_b = c(1, 1, 1, 2, 2),
  Date_start = c("2018-01-01", "2018-03-01", "2018-04-01", "2018-05-01", "2018-08-01") %>% 
    as.Date,
  Date_end = c("2018-02-01", "2018-04-01", "2018-06-01", "2018-08-01", "2018-10-01") %>% 
    as.Date
)

Теперь я хочу проверить для каждой строки первого набора данных, находится ли дата хотя бы в одном из (!) Диапазонов между Date_start иDate_end с теми же значениями идентификаторов второго набора данных.Вывод должен выглядеть следующим образом (первый - ИСТИНА, потому что он находится в первом диапазоне с ID_a == 1 и ID_b == 1):

TRUE, FALSE, FALSE, FALSE, TRUE

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Возможное решение с :

Data1[Data2
      , on = .(ID_a, ID_b, Date_1 >= Date_start, Date_1 <= Date_end)
      , test := between(x.Date_1, i.Date_start, i.Date_end)
      ][is.na(test), test := FALSE][]

, которое дает:

> Data1
   ID_a ID_b     Date_1  test
1:    1    1 2018-01-01  TRUE
2:    1    1 2018-05-01 FALSE
3:    2    1 2018-07-01 FALSE
4:    1    2 2018-09-01 FALSE
5:    2    2 2018-10-01  TRUE
0 голосов
/ 13 октября 2018

Вот один из способов использования dplyr -

left_join(Data1, Data2, by = c("ID_a", "ID_b")) %>%
  mutate(test = Date_1 >= Date_start & Date_1 <= Date_end) %>%
  group_by(ID_a, ID_b, Date_1) %>%
  summarise(test = any(test)) %>%
  ungroup()

# A tibble: 5 x 4
   ID_a  ID_b Date_1     test 
  <dbl> <dbl> <date>     <lgl>
1    1.    1. 2018-01-01 TRUE 
2    1.    1. 2018-05-01 FALSE
3    1.    2. 2018-09-01 FALSE
4    2.    1. 2018-07-01 FALSE
5    2.    2. 2018-10-01 TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...