R 中的多条件 case_when

Multi conditional case_when in R

我正在尝试向我的数据框中添加一个新列(颜色)。该行中的值取决于其他两列中的值。例如,当 class 值等于 4 且 Metro_status 值等于 Metro 时,我希望在新列的相应行中返回一个特定值。我尝试使用 dplyr case_when 进行此操作,并且它在一定程度上起作用了。

输出到颜色列的大部分颜色值不符合定义的条件。例如,第一行(Nome Census Area)的颜色值应该是 "#fcc48b" 而不是 "#d68182".

我做错了什么?? TIA!

这是我的代码:

#set working directory
  setwd("C:/Users/weirc/OneDrive/Desktop/Undergrad Courses/Fall 2021 Classes/GHY 3814/final project/data")
        
  #load packages
  library(readr)
  library(dplyr)
        
  #load data
  counties <- read_csv("vaxData_counties.csv")
        
  #create new column for class
  updated_county_data <- counties %>%
    mutate(class = case_when(
      Series_Complete >=75 ~ 4,
      Series_Complete >= 50 ~ 3,
      Series_Complete >= 25 ~ 2,
      TRUE ~ 1
    ), color = case_when(
      class == 4 | Metro_status == 'Metro' ~ '#d62023',
      class == 4 | Metro_status == 'Non-metro' ~ '#d68182',
      class == 3 | Metro_status == 'Metro' ~ '#fc9126',
      class == 3 | Metro_status == 'Non-metro' ~ '#fcc48b',
      class == 2 | Metro_status == 'Metro' ~ '#83d921',
      class == 2 | Metro_status == 'Non-metro' ~ '#abd977',
      class == 1 | Metro_status == 'NA' ~ '#7a7a7a'
    ))
  
  View(updated_county_data)
  
  write.csv(updated_county_data, file="county_data_manip/updated_county_data.csv")

这是数据框的样子

备注1:

when the class value is equal to 4 and the Metro_status value is equal to Metro

在 R(和许多编程语言)中 & 是“和”。您正在使用 |,即“或”。

备注2: 考虑将前四行简化为两行,因为地铁状态不会影响 类 4 & 3

的颜色

备注三: 要计算 class,请考虑 base::cut(), because it's adequate, yet simpler than dplyr::case_when().

在升级重新编码函数的复杂性时,这是我的偏好: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

备注4: 这是一个很好的 SO post,但看看你是否可以改进你的下一个。 阅读并合并 How to make a great R reproducible example? 中的元素。特别是使用 dput() 作为输入的方面,然后是预期数据集的明确示例。