【问题标题】:Getting NA's when using case_when in R在 R 中使用 case_when 时获取 NA
【发布时间】:2020-03-29 19:06:00
【问题描述】:

我正在尝试将 NFL 球队与他们各自的城市联系起来。在尝试 case_when 我得到 NA 时。下面是代码

nfl_RM %>% 
  select(team_name) %>% 
  mutate(state = case_when(
                           team_name %in% c("Rams","Chargers","49ers","Raiders") ~ "California", 
                           team_name %in% c("Jaguars", "Dolphins", "Buccaneers") ~ "Florida",
                           team_name %in% c("Ravens","Redskins") ~ "Maryland",
                           team_name == "Cardinals" ~ "Arizona",
                           team_name %in% c("Eagles","Steelers") ~ "Pennsylvania",
                           team_name %in% c("Bengals","Browns") ~ "Georgia",
                           team_name %in% c("Jets","Giants") ~ "New Jersey",
                           team_name %in% c("Cowboys","Texans") ~ "Texas",
                           team_name == "Broncos" ~ "Colorado",
                           team_name == "Falcons" ~ "Georgia",
                           team_name == "Bears" ~ "Illinois",
                           team_name == "Colts" ~ "Indiana",
                           team_name == "Saints" ~ "Louisiana",
                           team_name == "Patriots" ~ "Massachusetts",
                           team_name == "Lions" ~ "Michigan",
                           team_name == "Vikings" ~ "Minnesota",
                           team_name == "Chiefs" ~ "Missouri",
                           team_name == "Bills" ~ "New York",
                           team_name == "North Carolina" ~ "Panthers",
                           team_name == "Titans" ~ "Tennessee",
                           team_name == "Seahawks" ~ "Washington",
                           team_name == "Packers" ~ "Wisconsin"
                           )
         )

输出

team_name state

"Lions"     NA          
"Lions"     NA          
"Lions"     NA          
"Lions"     NA          
"Lions"     NA          
"Packers"   NA

另外,有没有其他方法可以做到这一点?

【问题讨论】:

  • 请提供可重现的数据集。

标签: r dplyr case-when


【解决方案1】:

这可能是数据集中已经存在NA 并且== 为这些返回NA 或字符串不完全匹配的情况。在这种情况下,我们可能需要一个str_detect 来匹配子字符串

从 OP 的输出数据来看,也可能是“team_name”周围有引号,即'"Lions"' 而不是"Lions"

更好的选择是创建一个 key/val 数据集,然后执行 left_join 而不是 100 个 case_when

library(dplyr)
keyval <- data.frame(team_name = c("Lions", "Bears",  "Falcons"),
       state = c("Michigan", "Illinois", "Georgia"), stringsAsFactors = FALSE)

nfl_RM %>% 
   select(team_name) %>%
   left_join(keyval) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-09
    • 2021-01-04
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多