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

问题描述

这里是初学者。尝试使用具有多个子字符串条件(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"),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)

从您的代码看来,您好像使用第三个参数作为要返回的字符数,而不是要停止的字符位置(文档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",6,6) == "Y" ~ "WTC",TRUE ~ "Unknown"))