dplyr: case_when 在满足第一个条件后有多个子字符串条件

dplyr: case_when with multiple substring conditions after first one is met

初学者。尝试使用具有多个子字符串条件(15 位字符串)的 dplyr:case_when。我意识到一旦满足第一行的条件,它就不会检查其他条件。希望更正此问题?

initialResults <- data %>% mutate(PLANE_TYPE = case_when(
  (substr(AIRLINE_RE,12,1) == "Y" ~ "HLT"), 
  (substr(AIRLINE_RE,4,1) == "Y" ~ "ALA"),
  (substr(AIRLINE_RE,6,1) == "Y" ~ "WTC"),
  TRUE ~ "Unknown"))

    AIRLINE_RE      PLANE_TYPE
1   NNNNNNNNNNNYNNN HLT
2   NNNYNNNNNNNNNNN Unknown
3   NNNNNNNNNNNYNNN HLT
4   YNNNNNNNNNNNNNN Unknown
5   NNNNNYNNNNNNNNN Unknown

期望的输出

    AIRLINE_RE      PLANE_TYPE
1   NNNNNNNNNNNYNNN HLT
2   NNNYNNNNNNNNNNN ALA
3   NNNNNNNNNNNYNNN HLT
4   YNNNNNNNNNNNNNN Unknown
5   NNNNNYNNNNNNNNN WTC

根据额外的详细信息,看起来原因可能是 substr。这个函数的输入是:

substr(x, start, stop)

从您的代码来看,您似乎使用第三个参数作为 return 的字符数,而不是要停止的字符位置(文档 here)。

以下为我生成了您想要的输出:

library(dplyr)

data = data.frame(AIRLINE_RE = c("NNNNNNNNNNNYNNN",
                               "NNNYNNNNNNNNNNN",
                               "NNNNNNNNNNNYNNN",
                               "YNNNNNNNNNNNNNN",
                               "NNNNNYNNNNNNNNN"))

data %>% mutate(PLANE_TYPE = case_when(
  substr(AIRLINE_RE,12,12) == "Y" ~ "HLT",
  substr(AIRLINE_RE,4,4) == "Y" ~ "ALA",
  substr(AIRLINE_RE,6,6) == "Y" ~ "WTC",
  TRUE ~ "Unknown"))