is_different() and is_equal() performs comparison tests, considering
NA values as legitimate values (see examples).
Details
cum_different() allows to identify groups of continuous rows that have
the same value. num_cycle() could be used to identify sub-groups that
respect a certain condition (see examples).
is_equal(x, y) is equivalent to
(x == y & !is.na(x) & !is.na(y)) | (is.na(x) & is.na(y)), and
is_different(x, y) is equivalent to
(x != y & !is.na(x) & !is.na(y)) | xor(is.na(x), is.na(y)).
Examples
v <- c("a", "b", NA)
is_different(v, "a")
#> [1] FALSE TRUE TRUE
is_different(v, NA)
#> [1] TRUE TRUE FALSE
is_equal(v, "a")
#> [1] TRUE FALSE FALSE
is_equal(v, NA)
#> [1] FALSE FALSE TRUE
d <- dplyr::tibble(group = c("a", "a", "b", "b", "a", "b", "c", "a"))
d |>
dplyr::mutate(
subgroup = cumdifferent(group),
sub_a = num_cycle(group == "a")
)
#> # A tibble: 8 × 3
#> group subgroup sub_a
#> <chr> <int> <int>
#> 1 a 1 1
#> 2 a 1 1
#> 3 b 2 NA
#> 4 b 2 NA
#> 5 a 3 2
#> 6 b 4 NA
#> 7 c 5 NA
#> 8 a 6 3