Multi condicional case_when en R

0

Pregunta

Estoy tratando de agregar una nueva columna (color) a mi la trama de datos. El valor en la fila depende de los valores de dos columnas. Por ejemplo, cuando el valor de la clase es igual a 4 y la Metro_status valor es igual a Metro, quiero un determinado valor devuelto en la fila correspondiente en la columna nueva. He intentado hacer esto con case_when utilizando dplyr y funcionó... hasta un punto.

La mayoría de los valores de color aparece en la columna color no se alinean con las condiciones definidas. Por ejemplo, las primeras filas (Nome Censo de Área) valor de color debe ser "#fcc48b" pero en su lugar se "#d68182".

¿Qué estoy haciendo mal?? TIA!

Aquí está mi código:

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

He aquí lo que la trama de datos se parece a enter image description here

case data-manipulation dplyr r
2021-11-23 23:02:04
1

Mejor respuesta

0

Observación 1:

cuando el valor de la clase es igual a 4 y la Metro_status valor es igual a Metro

En R (y muchos lenguajes de programación) & es la "y". Estás usando |, que es "o".

Observación 2: Considerar la simplificación de los primeros cuatro líneas a dos, ya que el Metro de estado no afecta el color de las clases de 4 y 3

Comentario 3: Para calcular class, considere la posibilidad de base::cut()porque es adecuada, sin embargo, más simple que dplyr::case_when().

Aquí está mi preferencia cuando la escalada de la complejidad de la recodificación de las funciones: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

Observación 4: Esta era una buena MANERA post, pero a ver si se puede mejorar su siguiente. Leer e incorporar elementos de Cómo hacer un gran R reproducible ejemplo?. Especialmente los aspectos de la utilización de dput() para la entrada y, a continuación, un ejemplo claro de su esperado del conjunto de datos.

2021-11-23 23:41:07

También, para añadir algo de color a por qué OPs versión se comporta de la manera que lo hace, las dos primeras líneas que comienzan class == 4 devolver TRUE para todas las combinaciones de Class y Metro_Status excepto para Metro_Status == "NA"
Mako212

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................