如何在 data.table 中为中断时间创建缺失数据?

How to create a missing data for broken time in data.table?

这是我的数据样本;

df <- data.table(Date = c(as.Date('2021-02-09'),as.Date('2021-02-10'),as.Date('2021-02-12'),as.Date('2021-02-13'),
                          as.Date('2021-02-14'),as.Date('2021-02-05'),as.Date('2021-02-07'),as.Date('2021-02-08')),
                 Store = c('A','A','A','A','B','B','B','B'),
                 Product = c(1,1,1,1,2,2,2,2),
                 Quantity = c(3,4,5,6,7,8,9,10))

对于每个组(StoreProduct 列代表一个组)有时可以在 Date 列中中断。

我想让它们在 Quantity 值中丢失。这是我想要的输出;

  Date       Store Product Quantity
  <date>     <chr>   <dbl>    <dbl>
  2021-02-09 A           1        3
  2021-02-10 A           1        4
  2021-02-11 A           1       NA
  2021-02-12 A           1        5
  2021-02-13 A           1        6
  2021-02-14 B           2        7
  2021-02-05 B           2        8
  2021-02-06 B           2       NA
  2021-02-07 B           2        9
  2021-02-08 A           2       10

注意:我有一个有限的 ram space 和一个巨大的 table。因此,无需重新分配的操作(例如使用 := 运算符)会更好。

提前致谢。

Jseq 的可能解决方案。
适用于商店 A,不确定我是否正确理解了您对商店 B 的问题,因为由于 2021-02-14

上注册的数量,这会创建比预期结果更多的行
df[,.SD[J(Date=seq(min(Date),max(Date),by=1)),on=.(Date)],by=.(Store,Product)]

    Store Product       Date Quantity
    <char>   <num>     <Date>    <num>
 1:      A       1 2021-02-09        3
 2:      A       1 2021-02-10        4
 3:      A       1 2021-02-11       NA
 4:      A       1 2021-02-12        5
 5:      A       1 2021-02-13        6
 6:      B       2 2021-02-05        8
 7:      B       2 2021-02-06       NA
 8:      B       2 2021-02-07        9
 9:      B       2 2021-02-08       10
10:      B       2 2021-02-09       NA
11:      B       2 2021-02-10       NA
12:      B       2 2021-02-11       NA
13:      B       2 2021-02-12       NA
14:      B       2 2021-02-13       NA
15:      B       2 2021-02-14        7