test_that("complete with no variables returns data as is", {
expect_equal(complete(mtcars), mtcars)
})
test_that("basic invocation works", {
df <- tibble(x = 1:2, y = 1:2, z = 3:4)
out <- complete(df, x, y)
expect_equal(nrow(out), 4)
expect_equal(out$z, c(3, NA, NA, 4))
})
test_that("will complete within each group (#396)", {
levels <- c("a", "b", "c")
df <- tibble(
g = c("a", "b", "a"),
a = c(1L, 1L, 2L),
b = factor(c("a", "a", "b"), levels = levels),
c = c(4, 5, 6)
)
gdf <- dplyr::group_by(df, g)
out <- complete(gdf, a, b)
# Still grouped
expect_identical(dplyr::group_vars(out), "g")
out <- nest(out, data = -g)
expect_identical(
out$data[[1]],
tibble(
a = vec_rep_each(c(1L, 2L), times = 3),
b = factor(vec_rep(c("a", "b", "c"), times = 2)),
c = c(4, NA, NA, NA, 6, NA)
)
)
expect_identical(
out$data[[2]],
tibble(
a = 1L,
b = factor(c("a", "b", "c")),
c = c(5, NA, NA)
)
)
})
test_that("complete does not allow expansion on grouping variable (#1299)", {
df <- tibble(
g = "x",
a = 1L
)
gdf <- dplyr::group_by(df, g)
# This is a dplyr error that we don't own
expect_error(complete(gdf, g))
})
test_that("can use `.drop = FALSE` with complete (#1299)", {
levels <- c("a", "b", "c")
df <- tibble(
g = factor(c("a", "b", "a"), levels = levels),
a = c(1L, 1L, 2L),
b = factor(c("a", "a", "b"), levels = levels)
)
gdf <- dplyr::group_by(df, g, .drop = FALSE)
# No data in group "c" for `a`, so we don't get that in the result
expect_identical(
complete(gdf, a),
vec_sort(gdf)
)
expect <- crossing(g = factor(levels = levels), b = factor(levels = levels))
expect <- dplyr::group_by(expect, g, .drop = FALSE)
expect <- dplyr::full_join(expect, df, c("g", "b"))
# Levels of empty vector in `b` are expanded for group "c"
expect_identical(complete(gdf, b), expect)
})
test_that("complete moves the grouping and completing variables to the front", {
df <- tibble(
a = 1L,
g = "x",
b = 2L
)
gdf <- dplyr::group_by(df, g)
expect_named(complete(gdf, b), c("g", "b", "a"))
})
test_that("expands empty factors", {
f <- factor(levels = c("a", "b", "c"))
df <- tibble(one = f, two = f)
expect_equal(nrow(complete(df, one, two)), 9)
expect_equal(ncol(complete(df, one, two)), 2)
})
test_that("empty expansion returns original", {
df <- tibble(x = character())
rs <- complete(df, y = NULL)
expect_equal(rs, df)
df <- tibble(x = 1:4)
rs <- complete(df, y = NULL)
expect_equal(rs, df)
})
test_that("not drop unspecified levels in complete", {
df <- tibble(x = 1:3, y = 1:3, z = c("a", "b", "c"))
df2 <- df %>% complete(z = c("a", "b"))
expect <- df[c("z", "x", "y")]
expect_equal(df2, expect)
})
test_that("complete() with empty nesting() / crossing() calls 'ignores' them (#1258)", {
df <- tibble(x = factor(c("a", "c"), letters[1:3]))
expect_identical(complete(df, x), complete(df, x, nesting()))
expect_identical(complete(df, x), complete(df, x, crossing()))
expect_identical(complete(df, x), complete(df, x, nesting(NULL)))
expect_identical(complete(df, x), complete(df, x, crossing(NULL)))
})
test_that("complete() fills missing values even when there are no `...` (#1272)", {
df <- tibble(a = c(1, NA, 3))
expect_identical(
complete(df, fill = list(a = 0)),
tibble(a = c(1, 0, 3))
)
})
test_that("both implicit and explicit missing values are filled by default", {
df <- tibble(
x = factor(1:2, levels = 1:3),
a = c(1, NA)
)
expect_identical(
complete(df, x, fill = list(a = 0)),
tibble(x = factor(1:3), a = c(1, 0, 0))
)
})
test_that("can limit the fill to only implicit missing values with `explicit` (#1270)", {
df <- tibble(
x = factor(1:2, levels = 1:3),
a = c(1, NA)
)
expect_identical(
complete(df, x, fill = list(a = 0), explicit = FALSE),
tibble(x = factor(1:3), a = c(1, NA, 0))
)
})
test_that("can't fill a grouping column", {
df <- tibble(
g = c(1, NA),
x = factor(1:2, levels = 1:3)
)
gdf <- dplyr::group_by(df, g)
# Silently ignore it
out <- complete(gdf, x, fill = list(g = 0))
expect_identical(out$g, c(1, 1, 1, NA, NA, NA))
})
test_that("if the completing variables have missings, `fill` will fill them after expansion", {
# This behavior is admittedly a little weird, but should not be common
# because you rarely specify a completing variable in `fill`
df <- tibble(
x = c(1, NA),
y = c(NA, 1)
)
# Expanded combinations that involved missings get filled
expect_identical(
complete(df, x, y, fill = list(x = 0, y = 0)),
tibble(x = c(1, 1, 0, 0), y = c(1, 0, 1, 0))
)
# Can limit the fill to only the "new" combinations that weren't in the
# original data. Here, the `x = NA, y = NA` combination that gets created.
expect_identical(
complete(df, x, y, fill = list(x = 0, y = 0), explicit = FALSE),
tibble(x = c(1, 1, NA, 0), y = c(1, NA, 1, 0))
)
})
test_that("validates its inputs", {
expect_snapshot(error = TRUE, {
complete(mtcars, explicit = 1)
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.