Используя функцию switch в R, я хочу дать условный результат на основе пустой строки

#r #if-statement #switch-statement #conditional-statements

#r #if-statement #switch-statement #условные операторы

Вопрос:

Например

 df$Col2 <- sapply(df$Col1, switch,
"001"= "Gold",
"005" = "Silver", 
"007" = "Platinum",
""= "OTHER)
 

До «007» это работает, но когда я добавляю последнюю пустую строку в условие, я получаю сообщение об ошибке:

 Error: attempt to use zero-length variable name
 

Есть ли способ заставить его прочитать пустую ячейку и на основе этого присвоить ей условное значение, которое я прошу об этом?

Ответ №1:

Мы можем использовать case_when

 library(dplyr)
df %>%
    mutate(Col2 = case_when(Col1 == '001' ~ 'Gold',
        Col1 == '005' ~ "Silver",
        Col1 == '007' ~ 'Platinum', 
         TRUE ~ "OTHER"))
 

С switch помощью, мы можем иметь default опцию в качестве последней записи

 df$Col2 <- sapply(df$Col1, switch,
     "001"= "Gold",
     "005" = "Silver", 
     "007" = "Platinum", "OTHER")
 

Ответ №2:

Я понял, что удаления «»= было достаточно, чтобы заставить его делать то, что я хотел.

 df$Col2 <- sapply(df$Col1, switch,
"001"= "Gold",
"005" = "Silver", 
"007" = "Platinum",
"OTHER")