Используя R, вы можете использовать следующий код для создания дополнительных дат с недельным интервалом. Используя функцию pad
из пакета padr
, вы можете определить интервал, с которым добавляются даты в data.frame. Используйте параметр группы, чтобы сообщить функции, какие переменные следует использовать для создания новых временных шкал или заполнения пропущенных дат. Вы можете указать даты начала и окончания, чтобы все между ними было принято, в противном случае это будут даты min
и max
, доступные в data.frame.
min.date <- min(df$ActivityDate)
max.date <- as.Date("2018-03-13T00:00:00Z")
library(padr)
df <- pad(df, interval = "week" , start_val = min.date, end_val = max.date, group = c("BranchId", "Hour", "weekdays"))
# this step can be skipped if you want to keep NA's instead of 0
df <- fill_by_value(df, value = 0)
df
BranchId Hour weekdays ActivityDate Total
1 1 11 3 2018-02-06 18
2 1 11 3 2018-02-13 23
3 1 11 3 2018-02-20 0
4 1 11 3 2018-02-27 0
5 1 11 3 2018-03-06 0
6 1 11 3 2018-03-13 0
7 1 12 3 2018-02-06 15
8 1 12 3 2018-02-13 13
9 1 12 3 2018-02-20 0
10 1 12 3 2018-02-27 0
11 1 12 3 2018-03-06 0
12 1 12 3 2018-03-13 0
13 1 13 3 2018-02-06 24
14 1 13 3 2018-02-13 22
15 1 13 3 2018-02-20 0
16 1 13 3 2018-02-27 0
17 1 13 3 2018-03-06 0
18 1 13 3 2018-03-13 0
данные:
df <- structure(list(BranchId = c(1L, 1L, 1L, 1L, 1L, 1L),
Hour = c(11L, 11L, 12L, 12L, 13L, 13L),
weekdays = c(3L, 3L, 3L, 3L, 3L, 3L),
ActivityDate = as.Date(c("2018-02-06T00:00:00", "2018-02-13T00:00:00","2018-02-06T00:00:00",
"2018-02-13T00:00:00", "2018-02-06T00:00:00", "2018-02-13T00:00:00")),
Total = c(18L, 23L, 15L, 13L, 24L, 22L)),
.Names = c("BranchId", "Hour", "weekdays", "ActivityDate", "Total"),
class = "data.frame", row.names = c(NA, -6L))