# Empty `row_number()` in `mutate()` ----------------------------------
test_that("row_number() in mutate works", {
df <- data.table(x = c(2, 1, 3))
df <- df %>%
mutate(row_num = row_number())
expect_equal(df$row_num, c(1, 2, 3))
})
test_that("row_number works on 0 row data frame, #639", {
df <- data.table(x = integer(), y = character())
res<- df %>%
mutate(x = row_number())
expect_equal(res$x, integer())
})
test_that("row_number() works with .by", {
df <- data.table(x = 1:3, y = 1:3)
df <- df %>%
mutate(row = row_number(), .by = x)
expect_equal(df$row, c(1, 1, 1))
})
# dplyr tests ------------------------------------------------
test_that("ranking empty vector returns empty vector", {
x <- numeric()
expect_equal(row_number(x), numeric())
expect_equal(min_rank(x), numeric())
expect_equal(dense_rank(x), numeric())
expect_equal(percent_rank(x), numeric())
expect_equal(cume_dist(x), numeric())
# expect_equal(ntile(x, 1), numeric())
})
test_that("rank functions deal pass NA (and NaN) through", {
x <- c(1, 2, NA, 1, 0, NaN)
expect_equal(percent_rank(x), c(1 / 3, 1, NA, 1 / 3, 0, NA))
expect_equal(min_rank(x), c(2L, 4L, NA, 2L, 1L, NA))
expect_equal(dense_rank(x), c(2L, 3L, NA, 2L, 1L, NA))
expect_equal(cume_dist(x), c(.75, 1, NA, .75, .25, NA))
expect_equal(row_number(x), c(2L, 4L, NA, 3L, 1L, NA))
})
test_that("ranking functions can handle data frames", {
# Explicitly testing partially/fully incomplete rows
df <- tidytable(
year = c(2020, 2020, 2021, 2020, 2020, NA),
month = c(3, 2, 1, 2, NA, NA)
)
expect_identical(row_number(df), c(3L, 1L, 4L, 2L, NA, NA))
expect_identical(min_rank(df), c(3L, 1L, 4L, 1L, NA, NA))
expect_identical(dense_rank(df), c(2L, 1L, 3L, 1L, NA, NA))
expect_identical(percent_rank(df), c(2/3, 0/3, 3/3, 0/3, NA, NA))
expect_identical(cume_dist(df), c(3/4, 2/4, 4/4, 2/4, NA, NA))
# expect_identical(ntile(df, 2), c(2L, 1L, 2L, 1L, NA, NA))
# expect_identical(ntile(df, 4), c(3L, 1L, 4L, 2L, NA, NA))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.