Вы можете создать строку для каждой даты, используя функцию complete
из пакета tidyr
.
Сначала я создаю фрейм данных с некоторыми примерами данных:
df <- data.frame(
depdate = as.Date(c('2017-11-02', '2017-11-03', '2017-11-05')),
bookings = c(43, 27, 27)
)
Далее я выполняю две операции.Во-первых, используя tidyr::complete
, я указываю все даты, которые я хочу в моем анализе.Я могу сделать это, используя seq.Date
, создавая последовательность от первого до последнего дня.
Как только это будет сделано, столбец day_of_year
будет просто равен номеру строки.
df_complete <- tidyr::complete(df,
depdate = seq.Date(from = min(df$depdate), to = max(df$depdate), by = 1)
)
df_complete$day_of_year <- 1:nrow(df_complete)
> df_complete
#> # A tibble: 4 x 3
#> depdate bookings day_of_year
#> <date> <dbl> <int>
#> 1 2017-11-02 43 1
#> 2 2017-11-03 27 2
#> 3 2017-11-04 NA 3
#> 4 2017-11-05 27 4
Эквивалентное решение с оператором трубы из dplyr
:
df %>%
complete(depdate = seq.Date(from = min(df$depdate), to = max(df$depdate), by = 1)) %>%
mutate(days_of_year = row_number())