簡體   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