How can I check that: within a row all the values in certain columns are equal, while treating NA
as missing data to be ignored? The special case of a row containing exclusively NA
should return NA
library(dplyr)
library(tibble)
dat <- tribble(
~a, ~b, ~c, ~d,
4, "blue", "blue", NA,
7, NA, "red", "green",
8, "green", "green", "green",
6, "blue", NA, NA,
1, NA, NA, NA
)
dat
#> # A tibble: 5 × 4
#> a b c d
#> <dbl> <chr> <chr> <chr>
#> 1 4 blue blue <NA>
#> 2 7 <NA> red green
#> 3 8 green green green
#> 4 6 blue <NA> <NA>
#> 5 1 <NA> <NA> <NA>
e.g. with the sample data above, checking that columns b:d
are in agreement, the output would be:
expected <- tribble(
~a, ~b, ~c, ~d, ~agreement,
4, "blue", "blue", NA, TRUE,
7, NA, "red", "green", FALSE,
8, "green", "green", "green", TRUE,
6, "blue", NA, NA, TRUE,
1, NA, NA, NA, NA
)
expected
#> # A tibble: 5 × 5
#> a b c d agreement
#> <dbl> <chr> <chr> <chr> <lgl>
#> 1 4 blue blue <NA> TRUE
#> 2 7 <NA> red green FALSE
#> 3 8 green green green TRUE
#> 4 6 blue <NA> <NA> TRUE
#> 5 1 <NA> <NA> <NA> NA
Created on 2022-12-08 by the reprex package (v2.0.1)