idx_day <- seq.Date(ymd("2017-01-01"), ymd("2017-01-20"), by = 4)
dat_x <- tibble(
date = idx_day,
value = rnorm(5)
)
test_that("a tbl_df/data.frame", {
expect_error(fill_gaps(dat_x), "data.frame")
})
test_that("unknown interval", {
tsbl <- as_tsibble(dat_x[1, ], index = date)
expect_identical(fill_gaps(tsbl), tsbl)
expect_equal(count_gaps(tsbl)$.n, integer(0))
expect_identical(scan_gaps(pedestrian[0L, ]), pedestrian[0L, 1:2])
expect_equal(has_gaps(tsbl), tibble(".gaps" = FALSE))
})
test_that("an irregular tbl_ts", {
tsbl <- as_tsibble(dat_x, index = date, regular = FALSE)
expect_identical(fill_gaps(tsbl), tsbl)
expect_identical(has_gaps(tsbl), tibble(.gaps = FALSE))
})
test_that("a tbl_ts without implicit missing values", {
tsbl <- as_tsibble(dat_x, index = date)
expect_identical(fill_gaps(tsbl), tsbl)
ref_tbl <- tibble(
.from = as.Date(character(0)), .to = as.Date(character(0)),
.n = integer(0)
)
expect_identical(count_gaps(tsbl), ref_tbl)
})
daylight <- pedestrian %>%
filter(
Sensor == "Birrarung Marr",
Date == lubridate::ymd("20151004", tz = "Australia/Melbourne")
)
standard <- pedestrian %>%
filter(
Sensor == "Birrarung Marr",
Date == lubridate::ymd("20150405", tz = "Australia/Melbourne")
)
test_that("daylight saving", {
expect_identical(NROW(fill_gaps(daylight)), 23L)
expect_identical(NROW(fill_gaps(standard)), 25L)
})
dat_y <- dat_x[c(1:3, 5), ]
tsbl <- as_tsibble(dat_y, index = date)
test_that("a tbl_ts of 4 day interval with no replacement", {
full_tsbl <- fill_gaps(tsbl)
expect_identical(dim(full_tsbl), c(5L, 2L))
expect_equal(
as_tibble(full_tsbl[4, ]),
tibble(date = ymd("2017-01-13"), value = NA_real_)
)
})
test_that("a tbl_ts of 4 day interval with value replacement", {
full_tsbl <- fill_gaps(tsbl, value = 0)
expect_equal(
as_tibble(full_tsbl[4, ]),
tibble(date = ymd("2017-01-13"), value = 0)
)
})
test_that("a tbl_ts of 4 day interval with function replacement", {
full_tsbl <- fill_gaps(tsbl, value = sum(value))
expect_equal(
as_tibble(full_tsbl[4, ]),
tibble(date = ymd("2017-01-13"), value = sum(tsbl$value))
)
})
dat_x <- tibble(
date = rep(idx_day, 2),
group = rep(letters[1:2], each = 5),
value = rep(1:2, each = 5)
)
dat_y <- dat_x[c(2:8, 10), ]
tsbl <- as_tsibble(dat_y, key = group, index = date)
test_that("fill_gaps() for corner case", {
expect_identical(fill_gaps(tsbl[1:5, ]), tsbl[1:5, ])
})
tourism <- tourism %>%
group_by_key() %>%
slice(1:10) %>%
ungroup()
test_that("fill_gaps() for yearquarter", {
full_tsbl <- tourism %>%
fill_gaps()
expect_s3_class(full_tsbl$Quarter, "yearquarter")
})
test_that("fill_gaps() for a grouped_ts", {
full_tsbl <- tsbl %>%
group_by(group) %>%
fill_gaps(value = sum(value), .full = TRUE)
expect_identical(dim(full_tsbl), c(10L, 3L))
expect_equal(
as_tibble(full_tsbl[c(1, 9), ]),
tibble(
date = c(ymd("2017-01-01"), ymd("2017-01-13")),
group = c("a", "b"),
value = c(4L, 8L)
), ignore_attr = TRUE
)
})
test_that("fill.tbl_ts(.full = TRUE)", {
full_tsbl <- tsbl %>%
fill_gaps(.full = TRUE) %>%
group_by(group) %>%
tidyr::fill(value, .direction = "up")
expect_equal(
as_tibble(full_tsbl[c(1, 9), ]),
tibble(
date = c(ymd("2017-01-01"), ymd("2017-01-13")),
group = c("a", "b"),
value = c(1L, 2L)
), ignore_attr = TRUE
)
})
test_that("fill.tbl_ts(.full = FALSE)", {
full_tsbl <- tsbl %>%
fill_gaps() %>%
group_by(group) %>%
tidyr::fill(value, .direction = "up")
expect_equal(
as_tibble(full_tsbl[8, ]),
tibble(
date = ymd("2017-01-13"),
group = "b",
value = 2L
), ignore_attr = TRUE
)
})
test_that("count_gaps(.full = )", {
full_tbl_t <- tsbl %>% count_gaps(.full = TRUE)
expect_equal(
full_tbl_t,
tibble(
group = c("a", "b"),
.from = c(ymd("2017-01-01"), ymd("2017-01-13")),
.to = c(ymd("2017-01-01"), ymd("2017-01-13")),
.n = c(1L, 1L)
)
)
full_tbl_f <- tsbl %>% count_gaps()
b <- tibble(
group = "b",
.from = ymd("2017-01-13"),
.to = ymd("2017-01-13"),
.n = 1L
)
expect_equal(full_tbl_f, b)
expect_error(count_gaps(tsbl, .name = NULL))
expect_error(count_gaps(tsbl, .name = 1:4))
expect_named(
count_gaps(tsbl, .name = c("from", "to", "n")),
c("group", "from", "to", "n")
)
expect_equal(
count_gaps(tsbl, .full = start())$.from,
tsbl$date[c(5, 3)]
)
expect_equal(
count_gaps(tsbl, .full = end())$.from,
tsbl$date[c(3)]
)
})
harvest <- tsibble(
year = c(2010, 2011, 2013, 2011, 2012, 2013),
fruit = rep(c("kiwi", "cherry"), each = 3),
kilo = sample(1:10, size = 6),
key = fruit, index = year
)
test_that("has_gaps()", {
expect_error(has_gaps(harvest, .name = NULL), "not TRUE")
expect_named(has_gaps(harvest, .name = "gap"), c("fruit", "gap"))
expect_equal(has_gaps(harvest)$.gaps, c(FALSE, TRUE))
expect_equal(has_gaps(harvest, .full = TRUE)$.gaps, c(TRUE, TRUE))
expect_equal(has_gaps(harvest, .full = start())$.gaps, c(TRUE, TRUE))
expect_equal(has_gaps(harvest, .full = end())$.gaps, c(FALSE, TRUE))
})
test_that("Error in tbl_gaps()", {
expect_error(tbl_gaps(x = 1:4, y = 1:3), "must not be greater than")
})
test_that("seq_generator()", {
x <- nanotime::nanotime("1970-01-01T00:00:00.000000001+00:00") + c(0:3, 5:9)
expect_length(seq_generator(x, default_time_units(interval_pull(x))), 10)
y <- structure(c("x", "y"), class = "xxx")
interval_pull.xxx <- function(x) {
new_interval(unit = 1)
}
expect_error(seq_generator(y, default_time_units(interval_pull(y))), "defined")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.