Does what dplyr::case_when() does, with the same syntax, but with data.table::fcase() under the hood.

dt_case_when(...)

Arguments

...

statements of the form: condition ~ label, where the label is applied if the condition is met

Value

Vector of the same size as the input vector

Examples


x <- rnorm(100)
dt_case_when(
  x < median(x) ~ "low",
  x >= median(x) ~ "high",
  is.na(x) ~ "other"
)
#>   [1] "high" "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "high"
#>  [11] "high" "high" "low"  "high" "high" "high" "high" "low"  "high" "low" 
#>  [21] "high" "low"  "low"  "high" "low"  "high" "low"  "low"  "low"  "high"
#>  [31] "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "low"  "high"
#>  [41] "low"  "high" "high" "low"  "low"  "low"  "low"  "high" "low"  "high"
#>  [51] "high" "low"  "high" "low"  "high" "low"  "high" "high" "low"  "low" 
#>  [61] "high" "high" "low"  "high" "low"  "high" "high" "low"  "low"  "high"
#>  [71] "high" "high" "low"  "low"  "low"  "high" "high" "low"  "low"  "high"
#>  [81] "low"  "low"  "low"  "high" "high" "low"  "high" "high" "low"  "low" 
#>  [91] "high" "high" "high" "low"  "low"  "high" "high" "high" "low"  "low" 

library(data.table)
temp <- data.table(
  pseudo_id = c(1, 2, 3, 4, 5),
  x = sample(1:5, 5, replace = TRUE)
)
temp[, y := dt_case_when(
  pseudo_id == 1 ~ x * 1,
  pseudo_id == 2 ~ x * 2,
  pseudo_id == 3 ~ x * 3,
  pseudo_id == 4 ~ x * 4,
  pseudo_id == 5 ~ x * 5
)]
#>    pseudo_id     x     y
#>        <num> <int> <num>
#> 1:         1     5     5
#> 2:         2     3     6
#> 3:         3     3     9
#> 4:         4     5    20
#> 5:         5     4    20