滚动加入两个 data.tables 与 R 中的日期

Rolling join two data.tables with date in R

我有两个数据 tables 称为 dt1(其中包含所有工作日的 date 列)和 dt2(其中包含一些工作日和一些 date 列周末)。我想加入 dt2 table 到 dt1 table 以便 -

  1. dt2 中的日期与 dt1 中的日期对齐,我们将调用新列 dates_2
  2. 如果 dt2 有一个日期(周六或周日),而 dt1 中没有,则将该日期移至 dt1 中的下一个日期。
  3. dt2在dt1中没有相应日期的日期,则在dates_2中填NA。
library(data.table)
date = seq(from = as.Date("2019-12-31"), to=as.Date("2020-12-31"), by=paste(1,"days"))
date <- date[!weekdays(date) %in% c('Saturday','Sunday')]
  
dt1 = data.table(group = "A", date1 = as.Date(date))
dt2 = structure(list(group = c("A", "A", "A", "A", "A", "A", "A", "A"
), date2 = structure(c(18286, 18391, 18468, 18566, 18657, 18741, 
18832, 18923), class = "Date")), row.names = c(NA, -8L), class = c("data.table", "data.frame"))

我试过下面的代码-

dt3 = dt1[dt2, on = c("group" = "group"), date_2 := date2, roll = T]
dt3[]

但是 dt3 不能正常滚动。

请指导我做错了什么。

这是预期的结果。为简洁起见,我展示了预期结果的唯一子集

   group      date1     date_2
...
...
...
1:     A 2020-05-06     NA
2:     A 2020-05-07     NA
3:     A 2020-05-08     NA
4:     A 2020-05-11     2020-05-09
5:     A 2020-05-12     NA
6:     A 2020-05-13     NA
7:     A 2020-05-14     NA
...
...
...
and the series goes on

由于 dt1 中没有日期“2020-05-09”,因此 dt2 中的日期已滚动到下一个日期。其余所有日期均为 NA。

我们可以使用non-equi加入

dt1[dt2, date_2 := date2, on = .(group, date1 > date2), mult = "first"]