data.table 并使用滚动多个列

Phi*_*ppe 3 r data.table

我无法理解那些看起来显而易见的事情......

 library(data.table)
 DT1<-data.table(MyDate=as.Date(rep("2019-02-01")),MyName=c("John","Peter","Paul"),Rate=c(210,180,190))

 DT2<-data.table(MyDate=seq(as.Date("2019-01-27"),as.Date("2019-02-03"),by="days"))
 setkey(DT1,MyDate)
 setkey(DT2,MyDate)
Run Code Online (Sandbox Code Playgroud)

我希望看到约翰、彼得和保罗的费率在最后滚动。当我做

DT1[DT2,on=.(MyDate),roll=TRUE]
Run Code Online (Sandbox Code Playgroud)

我得到:

        MyDate MyName Rate
 1: 2019-01-27   <NA>   NA
 2: 2019-01-28   <NA>   NA
 3: 2019-01-29   <NA>   NA
 4: 2019-01-30   <NA>   NA
 5: 2019-01-31   <NA>   NA
 6: 2019-02-01   John  210
 7: 2019-02-01   Paul  190
 8: 2019-02-01  Peter  180
 9: 2019-02-02  Peter  180
10: 2019-02-03  Peter  180
Run Code Online (Sandbox Code Playgroud)

虽然我想要这个:

       MyDate MyName Rate
 1:  2019-01-27   <NA>   NA
 2:  2019-01-28   <NA>   NA
 3:  2019-01-29   <NA>   NA
 4:  2019-01-30   <NA>   NA
 5:  2019-01-31   <NA>   NA
 6:  2019-02-01   John  210
 7:  2019-02-01   Paul  190
 8:  2019-02-01   Peter 180
 9:  2019-02-02   John  210
 10: 2019-02-02   Paul  190
 11: 2019-02-02   Peter 180
 12: 2019-02-03   John  210
 13: 2019-02-03   Paul  190
 14: 2019-02-03   Peter 180
Run Code Online (Sandbox Code Playgroud)

很明显我忽略了一些东西。

Fra*_*ank 5

一种复杂的方法(通过反复试验发现):

DT1[DT2, on=.(MyDate <= MyDate), allow.cartesian = TRUE]

        MyDate MyName Rate
 1: 2019-01-27   <NA>   NA
 2: 2019-01-28   <NA>   NA
 3: 2019-01-29   <NA>   NA
 4: 2019-01-30   <NA>   NA
 5: 2019-01-31   <NA>   NA
 6: 2019-02-01   John  210
 7: 2019-02-01  Peter  180
 8: 2019-02-01   Paul  190
 9: 2019-02-02   John  210
10: 2019-02-02  Peter  180
11: 2019-02-02   Paul  190
12: 2019-02-03   John  210
13: 2019-02-03  Peter  180
14: 2019-02-03   Paul  190
Run Code Online (Sandbox Code Playgroud)