繁体   English   中英

尝试在 R 中的变异动词内执行 case_when function

[英]Trying to perform a case_when function inside a mutate verb in R

尝试基于旧列创建新列,因此基本 case_when 语句在 sql 中对我有用,但我想在 R 中使用这种类似的 case_when 在通过 mutate 动词进行管道传输时,任何有关如何执行此操作的帮助都会不胜感激。

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

这是您的前 3 种案例类型的示例。 请注意, TRUE ~ "Historical")等同于您的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

使用 case when 不是最佳方式,但如果你真的想要它:

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"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM