如何在 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))
对于每个组(Store
和 Product
列代表一个组)有时可以在 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。因此,无需重新分配的操作(例如使用 :=
运算符)会更好。
提前致谢。
J
和 seq
的可能解决方案。
适用于商店 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
这是我的数据样本;
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))
对于每个组(Store
和 Product
列代表一个组)有时可以在 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。因此,无需重新分配的操作(例如使用 :=
运算符)会更好。
提前致谢。
J
和 seq
的可能解决方案。
适用于商店 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