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