滚动加入两个 data.tables 与 R 中的日期
Rolling join two data.tables with date in R
我有两个数据 tables 称为 dt1
(其中包含所有工作日的 date
列)和 dt2(其中包含一些工作日和一些 date
列周末)。我想加入 dt2
table 到 dt1
table 以便 -
- dt2 中的日期与 dt1 中的日期对齐,我们将调用新列
dates_2
。
- 如果
dt2
有一个日期(周六或周日),而 dt1
中没有,则将该日期移至 dt1
中的下一个日期。
- 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"]
我有两个数据 tables 称为 dt1
(其中包含所有工作日的 date
列)和 dt2(其中包含一些工作日和一些 date
列周末)。我想加入 dt2
table 到 dt1
table 以便 -
- dt2 中的日期与 dt1 中的日期对齐,我们将调用新列
dates_2
。 - 如果
dt2
有一个日期(周六或周日),而dt1
中没有,则将该日期移至dt1
中的下一个日期。 - 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"]