Turn implicit missing values into explicit missing values

fill_na(.data, ...)

# S3 method for tbl_ts
fill_na(.data, ..., .full = FALSE)

Arguments

.data

A tsibble.

...

A set of name-value pairs. The values provided will only replace missing values that were marked as "implicit", and will leave previously existing NA untouched.

  • empty: filled with default NA.

  • filled by values or functions.

.full

FALSE to insert NA for each key within its own period. TRUE to fill NA over the entire time span of the data (a.k.a. fully balanced panel).

See also

tidyr::fill, tidyr::replace_na

Other implict gaps handling: count_gaps

Examples

harvest <- tsibble( year = c(2010, 2011, 2013, 2011, 2012, 2014), fruit = rep(c("kiwi", "cherry"), each = 3), kilo = sample(1:10, size = 6), key = id(fruit), index = year ) # gaps as default `NA` ---- fill_na(harvest, .full = TRUE)
#> # A tsibble: 10 x 3 [1Y] #> # Key: fruit [2] #> year fruit kilo #> <dbl> <chr> <int> #> 1 2010 cherry NA #> 2 2011 cherry 1 #> 3 2012 cherry 3 #> 4 2013 cherry NA #> 5 2014 cherry 6 #> 6 2010 kiwi 8 #> 7 2011 kiwi 4 #> 8 2012 kiwi NA #> 9 2013 kiwi 10 #> 10 2014 kiwi NA
full_harvest <- fill_na(harvest, .full = FALSE) full_harvest
#> # A tsibble: 8 x 3 [1Y] #> # Key: fruit [2] #> year fruit kilo #> <dbl> <chr> <int> #> 1 2011 cherry 1 #> 2 2012 cherry 3 #> 3 2013 cherry NA #> 4 2014 cherry 6 #> 5 2010 kiwi 8 #> 6 2011 kiwi 4 #> 7 2012 kiwi NA #> 8 2013 kiwi 10
# use fill() to fill `NA` by previous/next entry full_harvest %>% group_by(fruit) %>% tidyr::fill(kilo, .direction = "down")
#> # A tsibble: 8 x 3 [1Y] #> # Key: fruit [2] #> # Groups: fruit [2] #> year fruit kilo #> <dbl> <chr> <int> #> 1 2011 cherry 1 #> 2 2012 cherry 3 #> 3 2013 cherry 3 #> 4 2014 cherry 6 #> 5 2010 kiwi 8 #> 6 2011 kiwi 4 #> 7 2012 kiwi 4 #> 8 2013 kiwi 10
# replace gaps with a specific value ---- harvest %>% fill_na(kilo = 0L)
#> # A tsibble: 8 x 3 [1Y] #> # Key: fruit [2] #> year fruit kilo #> <dbl> <chr> <int> #> 1 2011 cherry 1 #> 2 2012 cherry 3 #> 3 2013 cherry 0 #> 4 2014 cherry 6 #> 5 2010 kiwi 8 #> 6 2011 kiwi 4 #> 7 2012 kiwi 0 #> 8 2013 kiwi 10
# replace gaps using a function by variable ---- harvest %>% fill_na(kilo = sum(kilo))
#> # A tsibble: 8 x 3 [1Y] #> # Key: fruit [2] #> year fruit kilo #> <dbl> <chr> <int> #> 1 2011 cherry 1 #> 2 2012 cherry 3 #> 3 2013 cherry 32 #> 4 2014 cherry 6 #> 5 2010 kiwi 8 #> 6 2011 kiwi 4 #> 7 2012 kiwi 32 #> 8 2013 kiwi 10
# replace gaps using a function for each group ---- harvest %>% group_by(fruit) %>% fill_na(kilo = sum(kilo))
#> # A tsibble: 8 x 3 [1Y] #> # Key: fruit [2] #> year fruit kilo #> <dbl> <chr> <int> #> 1 2011 cherry 1 #> 2 2012 cherry 3 #> 3 2013 cherry 10 #> 4 2014 cherry 6 #> 5 2010 kiwi 8 #> 6 2011 kiwi 4 #> 7 2012 kiwi 22 #> 8 2013 kiwi 10
# leaves existing `NA` untouched ---- harvest[2, 3] <- NA harvest %>% group_by(fruit) %>% fill_na(kilo = sum(kilo, na.rm = TRUE))
#> # A tsibble: 8 x 3 [1Y] #> # Key: fruit [2] #> year fruit kilo #> <dbl> <chr> <int> #> 1 2011 cherry 1 #> 2 2012 cherry NA #> 3 2013 cherry 7 #> 4 2014 cherry 6 #> 5 2010 kiwi 8 #> 6 2011 kiwi 4 #> 7 2012 kiwi 22 #> 8 2013 kiwi 10
# replace NA ---- pedestrian %>% group_by(Sensor) %>% fill_na(Count = as.integer(median(Count)))
#> # A tsibble: 69,048 x 5 [1h] #> # Key: Sensor [4] #> Sensor Date_Time Date Time Count #> <chr> <dttm> <date> <int> <int> #> 1 Birrarung Marr 2015-01-01 00:00:00 2015-01-01 0 1630 #> 2 Birrarung Marr 2015-01-01 01:00:00 2015-01-01 1 826 #> 3 Birrarung Marr 2015-01-01 02:00:00 2015-01-01 2 567 #> 4 Birrarung Marr 2015-01-01 03:00:00 2015-01-01 3 264 #> 5 Birrarung Marr 2015-01-01 04:00:00 2015-01-01 4 139 #> 6 Birrarung Marr 2015-01-01 05:00:00 2015-01-01 5 77 #> 7 Birrarung Marr 2015-01-01 06:00:00 2015-01-01 6 44 #> 8 Birrarung Marr 2015-01-01 07:00:00 2015-01-01 7 56 #> 9 Birrarung Marr 2015-01-01 08:00:00 2015-01-01 8 113 #> 10 Birrarung Marr 2015-01-01 09:00:00 2015-01-01 9 166 #> # … with 69,038 more rows