Vectorised if else that if true returns first possibility otherwise returns
second possibility (even if the condition is a missing value).
When searching character vectors an alternative solution is to use
str_detect2()
.
Arguments
- condition
A logical vector
- true, false
Vectors to use for
TRUE
andFALSE
values ofcondition
.Both
true
andfalse
will be recycled to the size ofcondition
.true
,false
, andmissing
(if used) will be cast to their common type.
Value
Where condition is TRUE
, the matching value from true
, where it's FALSE
or NA
, the matching value from false
.
See also
ifelse()
and dplyr::if_else()
.
Examples
# consider the following data frame
data <- tibble::tibble(
x = c(TRUE, FALSE, NA),
y = c("x is false", NA, "hello")
)
# with a single vector if_else2() behaves the same as the default call to if_else().
dplyr::mutate(data,
y1 = dplyr::if_else(y != "x is false", "x is true", y),
y2 = if_else2(y != "x is false", "x is true", y)
)
#> # A tibble: 3 × 4
#> x y y1 y2
#> <lgl> <chr> <chr> <chr>
#> 1 TRUE x is false x is false x is false
#> 2 FALSE NA NA NA
#> 3 NA hello x is true x is true
# however in the case of a second vector the use of
# if_else2() does not introduce missing values
dplyr::mutate(data,
x1 = dplyr::if_else(stringr::str_detect(y, "x is false"), FALSE, x),
x2 = if_else2(stringr::str_detect(y, "x is false"), FALSE, x)
)
#> # A tibble: 3 × 4
#> x y x1 x2
#> <lgl> <chr> <lgl> <lgl>
#> 1 TRUE x is false FALSE FALSE
#> 2 FALSE NA NA FALSE
#> 3 NA hello NA NA
# in the case of regular expression matching an alternative is to use
# str_detect2()
dplyr::mutate(data,
x3 = dplyr::if_else(str_detect2(y, "x is false"), FALSE, x)
)
#> # A tibble: 3 × 3
#> x y x3
#> <lgl> <chr> <lgl>
#> 1 TRUE x is false FALSE
#> 2 FALSE NA FALSE
#> 3 NA hello NA