我有一个如下所示的数据集:
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 值。输出应如下所示(第一个为 TRUE,因为它位于 ID_a == 1
和 ID_b == 1
的第一个范围内):
TRUE, FALSE, FALSE, FALSE, TRUE
最佳答案
可能的解决方案为 data.table :
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/