Home > OS >  How to create and populate dummy rows in tidyverse?
How to create and populate dummy rows in tidyverse?

Time:01-27

I am working with some monthly data and I would like to convert it to daily data by creating and populating some dummy rows, as the question suggests.

For example, say I have the following data:

date       index
2013-04-30  232
2013-05-31  232
2013-06-30  233

Is there an "easy" way, preferably through tidyverse, that I could convert the above data into daily data, assuming I keep the index constant throughout the month? For example, I would like to create another 29 rows for April, ranging from 2013-04-01 to 2013-04-29 with the index of the last day of the month which would be 232 for April. The same should be applied to the rest of months (I have more data than just those three months).

Any intuitive suggestions will be greatly appreciated :)

CodePudding user response:

Using complete and fill from tidyr you could do:

dat <- structure(list(
  date = structure(c(15825, 15856, 15886), class = "Date"),
  index = c(232L, 232L, 233L)
), class = "data.frame", row.names = c(
  NA,
  -3L
))

library(tidyr)

dat |> 
  complete(date = seq(as.Date("2013-04-01"), as.Date("2013-06-30"), "day")) |> 
  fill(index, .direction = "up")
#> # A tibble: 91 × 2
#>    date       index
#>    <date>     <int>
#>  1 2013-04-01   232
#>  2 2013-04-02   232
#>  3 2013-04-03   232
#>  4 2013-04-04   232
#>  5 2013-04-05   232
#>  6 2013-04-06   232
#>  7 2013-04-07   232
#>  8 2013-04-08   232
#>  9 2013-04-09   232
#> 10 2013-04-10   232
#> # … with 81 more rows

CodePudding user response:

You can use full_seq within complete:

library(tidyr)
df |>
  complete(date = full_seq(date, 1)) |>
  fill(index)
  • Related