【问题标题】:dplyr: case_when with multiple substring conditions after first one is metdplyr:case_when 在满足第一个条件后具有多个子字符串条件
【发布时间】:2020-11-06 18:37:54
【问题描述】:

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

【问题讨论】:

  • 欢迎来到stackoverflow。对于每一行,case_when 将返回条件为真的第一个子句。所以问题可能是case_when 的工作方式与您想要使用它的方式相匹配。但如果没有更多细节,这很难说。请您添加示例数据、预期输出和当前输出吗?看看minimal reproducible example 可能会有所帮助。
  • 感谢@Simon.S.A。为您的回复和建议。我已经用一些数据、当前和预期的输出更新了我的查询。任何帮助将不胜感激。

标签: r dplyr substr case-when


【解决方案1】:

有了额外的细节,看起来原因可能是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",
  substr(AIRLINE_RE,6,6) == "Y" ~ "WTC",
  TRUE ~ "Unknown"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2012-12-04
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多