Using dplyr::case_when

  • case_when is a more general if_else and can be used often in place of multiple chained if_else or sapply’ing switch.

  • It uses a special syntax to allow any number of condition-vector pairs:

set.seed(123)
x <- rlnorm(100)

centers <- data.frame(type = c('mean', 'median', 'trimmed'))

centers$value = dplyr::case_when(
  centers$type == 'mean' ~ mean(x),
  centers$type == 'median' ~ median(x),
  centers$type == 'trimmed' ~ mean(x, trim = 0.1),
  .default = 1000
  )

centers
#>      type    value
#> 1    mean 1.652545
#> 2  median 1.063744
#> 3 trimmed 1.300568