Switch-style recoding of values
Usage
switch_case(
x,
...,
.preserve = FALSE,
.default = NA,
.exhaustive = FALSE,
preserve = deprecated(),
default = deprecated()
)
fn_switch_case(
x,
fn,
...,
.preserve = FALSE,
.default = NA,
.exhaustive = FALSE,
preserve = deprecated(),
default = deprecated()
)
Arguments
- x
A vector
- ...
<
dynamic-dots
> A sequence of two-sided formulas or named arguments.Formulas: Elements of
x
that match the left hand side (LHS) of formulas will be replaced with the value in the right hand side (RHS). The LHS must evaluate to an atomic vector. The RHS must be of length one.NULL
inputs are ignored.Named arguments: for
fn_switch_case()
, named arguments are passed to the functionfn
. Forswitch_case()
, named arguments will raise an error.
- .preserve
If
TRUE
, unmatched elements ofx
will be returned unmodified. (The elements may have their type coerced to be compatible with replacement values.) IfFALSE
, unmatched elements ofx
will be replaced with.default
. Defaults toFALSE
.- .default
If
.preserve
isFALSE
, a value to replace unmatched elements ofx
. Defaults toNA
.- .exhaustive
If
TRUE
, unmatched elements ofx
will result in an error. This can be useful to ensure you aren't accidentally forgetting to recode any values. Defaults toFALSE
.Note that if
.preserve
isTRUE
,.exhaustive
will never have any effect.- preserve, default
- fn
A function to apply to the left-hand side of each formula in
...
See also
switch_case_fct()
and fn_switch_case_fct()
to return a factor
and switch_case_list()
and fn_switch_case_list()
to return a list
grep_case()
to recode values with string pattern matching
fn_case()
, which applies a function to both x
and each formula's LHS
in_case()
, a pipeable alternative to dplyr::case_when()
Examples
parties <- sample(c("d", "r", "i", "g", "l"), 20, replace = TRUE)
switch_case(
parties,
"d" ~ "Democrat",
"r" ~ "Republican",
"i" ~ "Independent",
"g" ~ "Green",
"l" ~ "Libertarian"
)
#> [1] "Democrat" "Republican" "Libertarian" "Democrat" "Green"
#> [6] "Independent" "Green" "Green" "Independent" "Republican"
#> [11] "Independent" "Republican" "Republican" "Independent" "Green"
#> [16] "Republican" "Democrat" "Independent" "Democrat" "Republican"
parties %>%
switch_case(
"d" ~ "Democrat",
"r" ~ "Republican",
"i" ~ "Independent",
"g" ~ "Green",
"l" ~ "Libertarian"
)
#> [1] "Democrat" "Republican" "Libertarian" "Democrat" "Green"
#> [6] "Independent" "Green" "Green" "Independent" "Republican"
#> [11] "Independent" "Republican" "Republican" "Independent" "Green"
#> [16] "Republican" "Democrat" "Independent" "Democrat" "Republican"
parties %>%
switch_case(
"d" ~ "Democrat",
"r" ~ "Republican",
c("i", "g", "l") ~ "Other"
)
#> [1] "Democrat" "Republican" "Other" "Democrat" "Other"
#> [6] "Other" "Other" "Other" "Other" "Republican"
#> [11] "Other" "Republican" "Republican" "Other" "Other"
#> [16] "Republican" "Democrat" "Other" "Democrat" "Republican"
parties %>%
switch_case(
"d" ~ "Democrat",
"r" ~ "Republican",
.default = "Other"
)
#> [1] "Democrat" "Republican" "Other" "Democrat" "Other"
#> [6] "Other" "Other" "Other" "Other" "Republican"
#> [11] "Other" "Republican" "Republican" "Other" "Other"
#> [16] "Republican" "Democrat" "Other" "Democrat" "Republican"
parties %>%
switch_case(
"d" ~ "Democrat",
"r" ~ "Republican",
.preserve = FALSE
)
#> [1] "Democrat" "Republican" NA "Democrat" NA
#> [6] NA NA NA NA "Republican"
#> [11] NA "Republican" "Republican" NA NA
#> [16] "Republican" "Democrat" NA "Democrat" "Republican"
parties %>%
switch_case(
"d" ~ "Democrat",
"r" ~ "Republican",
.preserve = TRUE
)
#> [1] "Democrat" "Republican" "l" "Democrat" "g"
#> [6] "i" "g" "g" "i" "Republican"
#> [11] "i" "Republican" "Republican" "i" "g"
#> [16] "Republican" "Democrat" "i" "Democrat" "Republican"
data <- c(1, 4, 8, 12, 999, 6, 2, 888, 4, 6, 777)
fn_switch_case(
data,
function(x) paste(rep(x, 3), collapse = ""),
7 ~ "Not asked",
8 ~ "Refused",
9 ~ "Missing",
.preserve = TRUE
)
#> [1] "1" "4" "8" "12" "Missing" "6"
#> [7] "2" "Refused" "4" "6" "Not asked"