R'de çok koşullu case_when

0

Soru

Veri çerçeveme yeni bir sütun (renk) eklemeye çalışıyorum. Satırdaki değer, diğer iki sütundaki değerlere bağlıdır. Örneğin, sınıf değeri 4'e eşit olduğunda ve Metro_status değeri Metro'ya eşit olduğunda, yeni sütundaki ilgili satırda belirli bir değerin döndürülmesini istiyorum. Bunu dplyr kullanırken case_ ile yapmayı denedim ve işe yaradı... bir ölçüde.

Renk sütununa çıkan renk değerlerinin çoğunluğu tanımlanan koşullarla aynı hizada değildir. Örneğin, ilk satırların (Nome Sayım Alanı) renk değeri aşağıdaki gibi olmalıdır: "#fcc48b" ama bunun yerine "#d68182".

Neyi yanlış yapıyorum?? TIA!

İşte kodum:

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

İşte veri çerçevesi neye benziyor enter image description here

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

En iyi cevabı

0

Açıklama 1:

sınıf değeri 4'e eşit olduğunda ve Metro_status değeri Metro'ya eşit olduğunda

R'de (ve birçok programlama dilinde) & olduğu "ve". Kullanıyorsun | olur "ya da"hangi.

Açıklama 2: Metro durumu 4. ve 3. sınıflar için rengi etkilemediğinden, ilk dört satırı ikiye basitleştirmeyi düşünün

Açıklama 3: Hesaplamak class, düşünmek base::cut(), çünkü yeterli, ancak daha basitdplyr::case_when().

Yeniden kodlama işlevlerinin karmaşıklığını arttırırken tercihim şu şekildedir: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

Açıklama 4: Bu iyi bir SO yazısıydı, ancak bir sonrakini geliştirip geliştiremeyeceğinize bakın. Harika bir R tekrarlanabilir örnek nasıl yapılır öğelerini okuyun ve dahil edin?. Özellikle kullanım yönleri dput() girdi ve ardından beklenen veri kümenizin açık bir örneği için.

2021-11-23 23:41:07

Ayrıca, OPs sürümünün neden böyle davrandığına biraz daha renk katmak için, ilk iki satır başlıyor class == 4 tüm kombinasyonlar için TRUE değerini döndürür Class ve Metro_Status hariç Metro_Status == "NA"
Mako212

Diğer dillerde

Bu sayfa diğer dillerde

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