test_that("distinct equivalent to terra unique", {
df <- data.frame(
x = c(1, 1, 1, 1),
y = c(1, 1, 2, 2),
z = c(1, 2, 1, 2),
lon = c(0, 0, 1, 1),
lat = c(0, 0, 1, 1)
)
v <- terra::vect(df)
expect_equal(as_tibble(distinct(v)), as_tibble(terra::unique(v)))
v2 <- v %>% select(1, 2)
expect_equal(as_tibble(distinct(v2)), as_tibble(terra::unique(v2)))
})
test_that("distinct for single column works as expected", {
df <- data.frame(
x = c(1, 1, 1, 1),
y = c(1, 1, 2, 2),
z = c(1, 2, 1, 2),
lon = c(0, 0, 1, 1),
lat = c(0, 0, 1, 1)
)
v <- terra::vect(df)
vend <- distinct(v, x, .keep_all = TRUE)
expect_equal(ncol(vend), ncol(v))
expect_equal(nrow(vend), 1)
})
test_that("Remove unique geometries on specific calls", {
df <- data.frame(
x = c(1, 1, 1, 1),
y = c(1, 1, 2, 2),
z = c(1, 2, 1, 2),
lon = c(0, 0, 0, 0),
lat = c(0, 0, 0, 0)
)
v <- terra::vect(df)
vend <- distinct(v, geometry, .keep_all = TRUE)
expect_equal(ncol(vend), ncol(v))
expect_equal(nrow(vend), 1)
# Keep false
vend2 <- distinct(v, geometry, .keep_all = FALSE)
expect_equal(ncol(vend2), 0)
expect_equal(nrow(vend2), 1)
})
test_that("Name handling", {
df <- data.frame(
x = c(1, 1, 1, 1),
y = c(1, 1, 2, 2),
geometry = c(1, 2, 1, 2),
lon = c(0, 0, 0, 0),
lat = c(0, 0, 0, 0)
)
v <- terra::vect(df)
# With all
expect_snapshot(
expect_message(vall <- distinct(v), "with duplicated/reserved")
)
expect_identical(names(vall), c("x", "y", "geometry.1"))
expect_message(vend <- distinct(v, geometry, .keep_all = TRUE))
expect_equal(ncol(vend), ncol(v))
expect_equal(nrow(vend), 1)
expect_identical(names(vend), c("x", "y", "geometry.1"))
# Keep false
expect_message(vend2 <- distinct(v, geometry, .keep_all = FALSE))
expect_equal(ncol(vend2), 0)
expect_equal(nrow(vend2), 1)
})
test_that("distinct doesn't duplicate columns", {
df <- data.frame(a = 1:3, b = 4:6)
df <- terra::vect(df, geom = c("a", "b"), keepgeom = TRUE)
expect_identical(df %>% distinct(a, a) %>% names(), "a")
expect_identical(df %>% group_by(a) %>% distinct(a) %>% names(), "a")
})
test_that("grouped distinct always includes group cols", {
df <- data.frame(g = c(1, 2), x = c(1, 2))
df <- terra::vect(df, geom = c("g", "x"), keepgeom = TRUE)
out <- df %>%
group_by(g) %>%
distinct(x)
expect_identical(names(out), c("g", "x"))
})
test_that("empty grouped distinct equivalent to empty ungrouped", {
df <- data.frame(g = c(1, 2), x = c(1, 2))
df <- terra::vect(df, geom = c("g", "x"), keepgeom = TRUE)
df1 <- df %>%
distinct() %>%
group_by(g)
df2 <- df %>%
group_by(g) %>%
distinct()
expect_identical(as_tibble(df1), as_tibble(df2))
})
test_that("distinct adds grouping variables to front if missing", {
d <- data.frame(x = 1:2, y = 3:4)
d <- terra::vect(d, geom = c("x", "y"), keepgeom = TRUE)
expect_identical(distinct(group_by(d, y), x) %>% names(), c("y", "x"))
expect_identical(distinct(group_by(d, y), x, y) %>% names(), c("x", "y"))
})
test_that("distinct preserves grouping", {
df <- data.frame(x = c(1, 1, 2, 2), y = c(1, 1, 2, 2))
df <- terra::vect(df, geom = c("x", "y"), keepgeom = TRUE)
gf <- group_by(df, x)
out <- distinct(gf)
expect_equal(group_vars(out), "x")
out <- distinct(gf, y)
expect_equal(group_vars(out), "x")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.