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