Несколько условных случаев, когда в R

0

Вопрос

Я пытаюсь добавить новый столбец (цвет) в свой фрейм данных. Значение в строке зависит от значений в двух других столбцах. Например, когда значение класса равно 4, а значение Metro_status равно Metro, я хочу, чтобы определенное значение возвращалось в соответствующей строке в новом столбце. Я попытался сделать это с помощью case_when, используя dplyr, и это сработало... в какой-то степени.

Большинство значений цвета, выводимых в столбец цвет, не соответствуют определенным условиям. Например, значение цвета первых строк (Область переписи нома) должно быть "#fcc48b" но вместо этого это "#d68182".

Что я делаю не так?? ТИА!

Вот мой код:

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

Вот как выглядит фрейм данных enter image description here

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

Лучший ответ

0

Замечание 1:

когда значение класса равно 4, а значение Metro_status равно Metro

В R (и многих языках программирования) & это "и". Вы используете |, что означает "или".

Замечание 2: Подумайте об упрощении первых четырех строк до двух, поскольку статус метро не влияет на цвет для классов 4 и 3

Замечание 3: Для расчета class, рассмотримbase::cut(), потому что это адекватно, но все же проще, чемdplyr::case_when().

Вот мое предпочтение при увеличении сложности функций перекодирования: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

Замечание 4: Это был хороший пост, но посмотрите, сможете ли вы улучшить свой следующий. Прочитайте и включите элементы из "Как сделать отличный воспроизводимый пример R"?. Особенно аспекты использования dput() для ввода, а затем явного примера ожидаемого набора данных.

2021-11-23 23:41:07

Кроме того, просто чтобы добавить дополнительный цвет к тому, почему версия OPs ведет себя именно так, первые две строки, которые начинаются class == 4 возвращает значение TRUE для всех комбинаций Class и Metro_Status кроме Metro_Status == "NA"
Mako212

На других языках

Эта страница на других языках

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