dplyr case_when

One of my students asked for coding help. I knew that the solution needed a switch statement, but I was not sure how to implement that in R and the dplyr mindset. Fortunately, the powers that be implemented the case_when function about two months ago!

Here is an example on the mtcars dataset. I will take the number of syllables and add a cylinder_description column to write out the words “four”, “six”, and “eight”.

library("dplyr")
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data(mtcars)
df <- mtcars
head(df)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
df <- df %>%
  mutate(cylinder_description = case_when(
    cyl == 4 ~ "four", 
    cyl == 6 ~ "six", 
    TRUE ~ "eight")) %>%
  select(mpg, cyl, cylinder_description)
head(df)
##    mpg cyl cylinder_description
## 1 21.0   6                  six
## 2 21.0   6                  six
## 3 22.8   4                 four
## 4 21.4   6                  six
## 5 18.7   8                eight
## 6 18.1   6                  six