【问题标题】:Multi conditional case_when in RR中的多条件case_when
【发布时间】:2022-01-02 10:01:31
【问题描述】:

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

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

我做错了什么??蒂亚!

这是我的代码:

#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")

这是数据框的样子

【问题讨论】:

    标签: r dplyr case data-manipulation


    【解决方案1】:

    备注1:

    当类值等于 4 并且 Metro_status 值等于 Metro

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

    备注 2: 考虑将前四行简化为两行,因为 Metro 状态不会影响 4 和 3 类的颜色

    备注 3: 要计算class,请考虑base::cut(),因为它足够了,但比dplyr::case_when() 更简单。

    在提升重新编码功能的复杂性时,我的偏好如下: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

    备注 4: 这是一个很好的 SO 帖子,但看看你是否可以改进你的下一个。 阅读并合并来自How to make a great R reproducible example? 的元素。尤其是使用 dput() 作为输入的方面,然后是您预期数据集的显式示例。

    【讨论】:

    • 另外,只是为了给 OPs 版本的行为方式添加一些额外的颜色,以 class == 4 开头的前两行对于 ClassMetro_Status 的所有组合返回 TRUE,除了Metro_Status == "NA"
    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多