Home > Enterprise >  How to use complete to fill dates of two consecutive year e.g. 2021 and 2022
How to use complete to fill dates of two consecutive year e.g. 2021 and 2022

Time:01-02

I have this dataframe:

DF <- tribble(
  ~date, ~value,
  "2021-12-01", 1,
  "2022-01-01", 2)

  date       value
  <chr>      <dbl>
1 2021-12-01     1
2 2022-01-01     2

Usually I use complete to fill each month with all days: Here I use again complete:

library(tidyr)
library(dplyr)
library(lubridate)
DF %>% 
  mutate(date = ymd(date)) %>% 
  complete(date = seq(min(date), max(date), by = 'day')) %>% 
  data.frame()

And I get:

         date value
1  2021-12-01     1
2  2021-12-02    NA
3  2021-12-03    NA
4  2021-12-04    NA
5  2021-12-05    NA
6  2021-12-06    NA
7  2021-12-07    NA
8  2021-12-08    NA
9  2021-12-09    NA
10 2021-12-10    NA
11 2021-12-11    NA
12 2021-12-12    NA
13 2021-12-13    NA
14 2021-12-14    NA
15 2021-12-15    NA
16 2021-12-16    NA
17 2021-12-17    NA
18 2021-12-18    NA
19 2021-12-19    NA
20 2021-12-20    NA
21 2021-12-21    NA
22 2021-12-22    NA
23 2021-12-23    NA
24 2021-12-24    NA
25 2021-12-25    NA
26 2021-12-26    NA
27 2021-12-27    NA
28 2021-12-28    NA
29 2021-12-29    NA
30 2021-12-30    NA
31 2021-12-31    NA
32 2022-01-01     2

So January 2022 is not filled or completed?!

The desired output would be the same above all days of january 2022.

I am looking for a solution without adding any additional date to the dataframe.

CodePudding user response:

If you want to include january 2022, you need to specify the last day of january in the DF:

DF <- tribble(
  ~date, ~value,
  "2021-12-01", 1,
  "2022-01-01", 2)

DF %>% 
  mutate(date = ymd(date)) %>% 
  complete(date = seq(min(date), max(ceiling_date(date, unit = "month") - ddays(1)), by = 'day')) %>% 
  data.frame()
  • Related