Skip to contents

Replace values with NA based on some condition, for variables that meet some predicate

Usage

replace_with_na_if(data, .predicate, condition)

Arguments

data

Dataframe

.predicate

A predicate function to be applied to the columns or a logical vector.

condition

A condition required to be TRUE to set NA. Here, the condition is specified with a formula, following the syntax: ~.x {condition}. For example, writing ~.x < 20 would mean "where a variable value is less than 20, replace with NA".

Value

Dataframe

Examples


dat_ms <- tibble::tribble(~x,  ~y,    ~z,
                          1,   "A",   -100,
                          3,   "N/A", -99,
                          NA,  NA,    -98,
                          -99, "E",   -101,
                          -98, "F",   -1)

dat_ms
#> # A tibble: 5 × 3
#>       x y         z
#>   <dbl> <chr> <dbl>
#> 1     1 A      -100
#> 2     3 N/A     -99
#> 3    NA NA      -98
#> 4   -99 E      -101
#> 5   -98 F        -1

replace_with_na_if(data = dat_ms,
                 .predicate = is.character,
                 condition = ~.x == "N/A")
#> # A tibble: 5 × 3
#>       x y         z
#>   <dbl> <chr> <dbl>
#> 1     1 A      -100
#> 2     3 NA      -99
#> 3    NA NA      -98
#> 4   -99 E      -101
#> 5   -98 F        -1
replace_with_na_if(data = dat_ms,
                   .predicate = is.character,
                   condition = ~.x %in% common_na_strings)
#> # A tibble: 5 × 3
#>       x y         z
#>   <dbl> <chr> <dbl>
#> 1     1 A      -100
#> 2     3 NA      -99
#> 3    NA NA      -98
#> 4   -99 E      -101
#> 5   -98 F        -1

replace_with_na(dat_ms,
              to_na = list(x = c(-99, -98),
                           y = c("N/A"),
                           z = c(-101)))
#> # A tibble: 5 × 3
#>       x y         z
#>   <dbl> <chr> <dbl>
#> 1     1 A      -100
#> 2     3 N/A     -99
#> 3    NA NA      -98
#> 4   -99 E      -101
#> 5   -98 F        -1