r - 检查日期是否在查找表范围内

标签 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

最佳答案

可能的解决方案为 :

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

关于r - 检查日期是否在查找表范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52793388/

相关文章:

java - 日历偏移问题

javascript - 为什么可以在 javascript 中减去 Date 对象?是否有任何形式的运算符重载?

mysql - 对通过连接表连接的另一个表中的连续行进行分组

sql-server - T-SQL : How to join tables without creating extra rows - need a one row to one row correspondance

r - 在 R 中使用 cowplot 对齐 image() 图

java - Long 到 XMLGregorianCalendar 并返回到 Long

r - 无法更改 ggplot2 直方图上的颜色

mysql - 如何在mysql中左连接多个一对多的表?

r - 如何对 data.frame 列值求和?

r - 在包检查中运行示例时出现 "could not find function"