Отступы вокруг дат в R, чтобы добавить пропущенные / пустые месяцы?

PADR R Pacakge виньетка описывает различные функции пакета для даты и времени площадки вокруг указанной даты и время.

Я нахожусь в ситуациях, когда я буду подсчитывать события во фреймах данных (т.е. dplyr::count()) и нужно будет построить график появления, скажем, за период... 1 год. Когда я подсчитываю события во фрейме данных небольшого объема, я часто получаю результаты по отдельной строке, например:

library(tidyverse)
library(lubridate)
library(padr)
df <- tibble(col1 = as.Date("2018-10-01"), col2 = "g", col3 = 5)

#> # A tibble: 1 x 3
#>   col1       col2   col3
#>   <date>     <chr> <dbl>
#> 1 2018-10-01 g         5

Для построения графика с помощью ggplot в течение года, ежемесячно, требуется фрейм данных из 12 строк. В основном это должно выглядеть так:

#> # A tibble: 12 x 3
#>   col1       col2   col3
#>   <date>     <chr> <dbl>
#>  1 2018-01-01 NA        0
#>  2 2018-02-01 NA        0
#>  3 2018-03-01 NA        0
#>  4 2018-04-01 NA        0
#>  5 2018-05-01 NA        0
#>  6 2018-06-01 NA        0
#>  7 2018-07-01 NA        0
#>  8 2018-08-01 NA        0
#>  9 2018-09-01 NA        0
#> 10 2018-10-01 g         5
#> 11 2018-11-01 NA        0
#> 12 2018-12-01 NA        0

Возможно padr() можно сделать это с помощью некоторой комбинации thicken() а также pad()функции. Мои попытки показаны ниже, ни строка 3, ни строка 4 не создают фрейм данных, показанный непосредственно выше.

Как мне создать указанное выше прямое указание фрейма данных, используя padr(), lubridate(), tidyverse(), data.table(), base R, или как угодно? Ручной ввод каждого месяца также не рассматривается, если это необходимо. Спасибо.

df %>% 
  thicken("year") %>% 
  # pad(by = "col1") %>%       # line 3
  # pad(by = "col1_year") %>%  # line 4
  print()

1 ответ

Решение
library(lubridate)
library(tidyverse)

df <- tibble(col1 = as.Date("2018-10-01"), col2 = "g", col3 = 5)

my_year <- year(df$col1[1])

df2 <- tibble(col1 = seq(ymd(paste0(my_year,'-01-01')),ymd(paste0(my_year,'-12-01')), by = '1 month'))

df3 <- merge(df,df2, by ="col1",all.y=TRUE) %>% mutate(col3 = replace_na(col3,0))

df3
Другие вопросы по тегам