Kilka warunkowych przypadków, gdy w R

0

Pytanie

Próbuję dodać nową kolumnę (kolor) w ramce danych. Wartość w wierszu zależy od wartości w pozostałych dwóch kolumnach. Na przykład, gdy wartość klasy jest równa 4, a wartość Metro_status i tak Metro, chcę, aby określoną wartość wróciło w odpowiednim wierszu w nowej kolumnie. Próbowałem zrobić to za pomocą case_when za pomocą dplyr, i to się udało... w pewnym stopniu.

Większość wartości kolorów wyświetlanych w kolumnie kolor, nie spełniają określonych warunków. Na przykład, wartość koloru pierwszych wierszy (Obszar spisu nome) musi być "#fcc48b" ale zamiast tego, to "#d68182".

Co robię nie tak?? TIA!

Oto mój kod:

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

Oto jak wygląda ramka danych enter image description here

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

Najlepsza odpowiedź

0

Uwaga 1:

gdy wartość klasy jest równa 4, a wartość Metro_status i tak Metro

W R (i wielu językach programowania) & to "i". Używasz |, co oznacza "lub".

Uwaga 2: Pomyśl o ułatwieniach w pierwszych czterech wierszy do dwóch, ponieważ status metra nie ma wpływu na kolor dla klas 4 i 3

Uwaga 3: Do obliczenia classrozważmybase::cut()bo to właściwie, ale i tak łatwiejsze niżdplyr::case_when().

Oto moje preferencje zwiększenie złożoności funkcji transkodowania: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

Uwaga 4: To był dobry post, ale zobacz, czy będziesz w stanie poprawić swój następny. Przeczytaj i włącz elementy z "Jak zrobić świetny odtwarzany przykład R"?. Szczególnie aspekty wykorzystania dput() do wprowadzania, a następnie wyraźnej przykład oczekiwanego zbioru danych.

2021-11-23 23:41:07

Ponadto, tylko po to, aby dodać dodatkowy kolor do tego, dlaczego wersja OPs zachowuje się dokładnie tak, dwa pierwsze wiersze, które zaczynają się class == 4 zwraca wartość TRUE dla wszystkich kombinacji Class i Metro_Status poza Metro_Status == "NA"
Mako212

W innych językach

Ta strona jest w innych językach

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