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