检查日期是否在查询表的范围内

时间:2018-10-13 13:24:08

标签: r date join data.table range

我有一个看起来像这样的数据集:

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_startDate_end之间的范围内,且第二数据集的ID值相同。输出应该看起来像这样(第一个为TRUE,因为它在ID_a == 1ID_b == 1的第一个范围内):

TRUE, FALSE, FALSE, FALSE, TRUE

2 个答案:

答案 0 :(得分:3)

使用的可能解决方案:

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

答案 1 :(得分:2)

这是使用int a[26] = { 1, 2, 3 };的一种方法-

dplyr