Multi condicional case_when em R

0

Pergunta

Estou tentando adicionar uma nova coluna (cor) para o meu quadro de dados. O valor na linha depende dos valores de duas outras colunas. Por exemplo, quando o valor da classe é igual a 4 e o Metro_status valor é igual ao Metrô, eu quero um específico valor retornado na linha correspondente na nova coluna. Eu tentei fazer isso com case_when usando dplyr e funcionou... até certo ponto.

A maioria dos valores de cor de saída para a coluna de cor não se alinham com as condições definidas. Por exemplo, a primeira linha (Nome do Censo Área) valor de cor deve ser "#fcc48b" mas, em vez disso, é "#d68182".

O que estou fazendo de errado?? TIA!

Aqui está o meu código:

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

Aqui está o que o quadro de dados parece enter image description here

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

Melhor resposta

0

Observação 1:

quando o valor da classe é igual a 4 e o Metro_status valor é igual ao Metro

Em R (e muitas linguagens de programação) & é o "e". Você está usando |, o que é "ou".

Comentário 2: Considere simplificar as quatro primeiras linhas para dois, uma vez que o Metro de status não afeta a cor para as classes 4 e 3

Comentário 3: Para calcular class, considere base::cut()porque é adequado, ainda mais simples do que dplyr::case_when().

Aqui está a minha preferência quando escalar a complexidade de codificação de funções: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding

Comentário 4: Este foi um bom post, mas veja se você pode melhorar o seu próximo. Ler e incorporar elementos de Como fazer uma grande R reproduzível exemplo?. Especialmente os aspectos relacionados com o uso dput() para a entrada e, em seguida, um exemplo explícito do que esperava o conjunto de dados.

2021-11-23 23:41:07

Também, só para adicionar um pouco de cor adicional para qual OPs versão comporta-se da maneira que ele faz, as duas primeiras linhas que começam class == 4 retornar TRUE para todas as combinações de Class e Metro_Status exceto para Metro_Status == "NA"
Mako212

Em outros idiomas

Esta página está em outros idiomas

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