Multi condizionale case_when in R

0

Domanda

Sto cercando di aggiungere una nuova colonna (a colori) a mio frame di dati. Il valore nella riga dipende dai valori in due altre colonne. Per esempio, quando il valore di classe è pari a 4 e il Metro_status valore è uguale a della Metropolitana, voglio uno specifico valore restituito nella corrispondente riga della colonna. Ho provato a fare questo con case_when utilizzando dplyr e ha funzionato... a un certo punto.

La maggior parte dei valori di colore riprodotto nella colonna colore non in linea con le condizioni definite. Per esempio, la prima riga (Nome Census Area) colore dovrebbe essere "#fcc48b" ma invece è "#d68182".

Che cosa sto facendo di sbagliato?? TIA!

Ecco il mio codice:

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

Ecco ciò che il frame di dati sembra enter image description here

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

Migliore risposta

0

Osservazione 1:

quando il valore di classe è pari a 4 e il Metro_status valore è uguale a Metro

In R (e molti linguaggi di programmazione) & è la "e". Stai usando |che è "o".

Nota 2: Considerare semplificare le prime quattro righe per due, dato che la Metro di stato non influisce sul colore per le classi 4 e 3

Nota 3: Per calcolare class, prendere in considerazione base::cut()perché è adeguata, ancora più semplice dplyr::case_when().

Ecco la mia preferenza al momento della crescente complessità di ricodifica funzioni: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

Osservazione 4: Questo è stato un buon post, ma vedere se è possibile migliorare il vostro prossimo. Leggere e incorporare elementi Come fare una grande R riproducibile esempio?. In particolare gli aspetti di utilizzo dput() per l'ingresso e poi un esplicito esempio di set di dati.

2021-11-23 23:41:07

Inoltre, giusto per aggiungere un po di colore aggiuntivo perché OPs versione si comporta il modo in cui lo fa, le prime due righe che iniziano class == 4 return TRUE per tutte le combinazioni di Class e Metro_Status fatta eccezione per Metro_Status == "NA"
Mako212

In altre lingue

Questa pagina è in altre lingue

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