Multi conditionnelle case_when dans la R

0

La question

Je suis en train d'ajouter une nouvelle colonne (la couleur) de mon bloc de données. La valeur de la ligne dépend de la valeur dans les deux autres colonnes. Par exemple, lorsque la valeur de classe est égale à 4 et le Metro_status valeur est égale à la Métro, je veux une valeur spécifique retourné dans la ligne correspondante dans la nouvelle colonne. J'ai essayé de le faire avec case_when à l'aide de dplyr et cela a fonctionné... dans une certaine mesure.

La majorité des valeurs de couleur de sortie dans la colonne de couleur ne sont pas alignées avec les conditions définies. Par exemple, les premières rangées (Nome Zone de Recensement) valeur de couleur doit être "#fcc48b" mais au lieu de cela est "#d68182".

Ce que je fais mal?? TIA!

Voici mon code:

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

Voici ce que le bloc de données qui ressemble à enter image description here

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

La meilleure réponse

0

Remarque 1:

lorsque la valeur de classe est égale à 4 et le Metro_status valeur est égale à la Métro

Dans R (et de nombreux langages de programmation) & est le "et". Vous êtes à l'aide de |qui est le "ou".

Remarque 2: Envisager de simplifier les quatre premières lignes à deux, depuis le Métro statut n'affecte pas la couleur pour les classes de 4 et 3

Remarque 3: Pour calculer class, envisager de base::cut()parce que c'est suffisant, encore plus simple que dplyr::case_when().

Voici ma préférence lors de l'escalade de la complexité de recoder les fonctions de: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

Remarque 4: C'était un bon à ce poste, mais de voir si vous pouvez améliorer votre prochain. Lire et intégrer des éléments de la Façon de faire un grand R reproductible exemple?. En particulier les aspects de l'utilisation de dput() pour l'entrée, puis un exemple explicite de votre ensemble de données attendu.

2021-11-23 23:41:07

Aussi, juste pour ajouter un peu de couleur supplémentaire à pourquoi OPs version se comporte de cette façon, les deux premières lignes qui commencent class == 4 retourner TRUE pour toutes les combinaisons de Class et Metro_Status sauf pour Metro_Status == "NA"
Mako212

Dans d'autres langues

Cette page est dans d'autres langues

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