Trying to create a new column based off of an old column, so a basic case_when statement works for me in sql but I'd like to utilize this similar case_when in R when piping through a mutate verb, any help as how to do this would be greatly appreciated.
WHEN [Salary Grade] = "C01"
OR [Salary Grade] = "F03"
OR [Salary Grade] = "P02"
OR [Salary Grade] = "TS1"
THEN "1"
WHEN [Salary Grade] = "C02"
OR [Salary Grade] = "F04"
OR [Salary Grade] = "P03"
OR [Salary Grade] = "TS2"
THEN "2"
WHEN [Salary Grade] = "C03"
OR [Salary Grade] = "F05"
OR [Salary Grade] = "P04"
OR [Salary Grade] = "T04"
THEN "3"
WHEN [Salary Grade] = "C04"
OR [Salary Grade] = "F06"
OR [Salary Grade] = "P05"
OR [Salary Grade] = "T05"
THEN "4"
WHEN [Salary Grade] = "C05"
OR [Salary Grade] = "F07"
OR [Salary Grade] = "S10"
OR [Salary Grade] = "T06"
THEN "5"
WHEN [Salary Grade] = "C06"
OR [Salary Grade] = "F08"
OR [Salary Grade] = "PM4"
THEN "6"
WHEN [Salary Grade] = "C07"
OR [Salary Grade] = "F09"
OR [Salary Grade] = "PM3"
OR [Salary Grade] = "T07"
THEN "7"
WHEN [Salary Grade] = "C08"
OR [Salary Grade] = "F10"
OR [Salary Grade] = "PM2"
OR [Salary Grade] = "S15"
THEN "8"
WHEN [Salary Grade] = "C09"
OR [Salary Grade] = "DIM"
OR [Salary Grade] = "PM1"
OR [Salary Grade] = "S30"
OR [Salary Grade] = "T09"
THEN "9"
WHEN [Salary Grade] = "C10"
OR [Salary Grade] = "S40"
OR [Salary Grade] = "T10"
THEN "10"
WHEN [Salary Grade] = "C11"
OR [Salary Grade] = "PDM"
OR [Salary Grade] = "SMG"
OR [Salary Grade] = "T11"
THEN "11"
WHEN [Salary Grade] = "C12"
OR [Salary Grade] = "T12"
THEN "12"
ELSE "Historical"
END
Here's an example with your first 3 case types. Note that the TRUE ~ "Historical")
is equivalent to your ELSE
.
library(dplyr)
Salary_Grade <- c("C01","F03","P02","TS1","C02","F04","P03","TS2","C03","F05","P04","T04")
df <- data.frame(Salary_Grade, stringsAsFactors = FALSE)
df %>%
mutate(value = case_when(Salary_Grade %in% c("C01","F03","P02","TS1") ~ "1",
Salary_Grade %in% c("C02","F04","P03","TS2") ~ "2",
Salary_Grade %in% c("C03","F05","P04","T04") ~ "3",
TRUE ~ "Historical"))
Salary_Grade value
1 C01 1
2 F03 1
3 P02 1
4 TS1 1
5 C02 2
6 F04 2
7 P03 2
8 TS2 2
9 C03 3
10 F05 3
11 P04 3
12 T04 3
use of case when will not be the optimal way but if you really want it:
df %>%
mutate(
SalaryBin=case_when(
Salary_Grade %in% c("C01","F03","P02","TS1") ~ "1",
Salary_Grade %in% c("C02","F04","P03","TS2") ~ "2",
# similarly put other conditions
TRUE ~ "Historical"))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.