Como usar case_when() em dplyr
A função case_when() do pacote dplyr em R pode ser usada para criar novas variáveis a partir de variáveis existentes.
Esta função usa a seguinte sintaxe básica:
library (dplyr) df %>% mutate (new_var = case_when (var1 < 15 ~ ' low ', var2 < 25 ~ ' med ', TRUE ~ ' high '))
Observe que TRUE é equivalente a uma instrução “else”.
Os exemplos a seguir mostram como usar esta função na prática com o seguinte quadro de dados:
#create data frame df <- data. frame (player = c('AJ', 'Bob', 'Chad', 'Dan', 'Eric', 'Frank'), position = c('G', 'F', 'F', 'G', 'C', NA), points = c(12, 15, 19, 22, 32, NA), assists = c(5, 7, 7, 12, 11, NA)) #view data frame df player position points assists 1 AJ G 12 5 2 Bob F 15 7 3 Chad F 19 7 4 Dan G 22 12 5 Eric C 32 11 6 Frank NA NA NA
Exemplo 1: Crie uma nova variável a partir de uma variável existente
O código a seguir mostra como criar uma nova variável chamada qualidade cujos valores são derivados da coluna de pontos :
df %>% mutate (quality = case_when (points > 20 ~ ' high ', points > 15 ~ ' med ', TRUE ~ ' low ' )) player position points assists quality 1 AJ G 12 5 low 2 Bob F 15 7 low 3 Chad F 19 7 med 4 Dan G 22 12 high 5 Eric C 32 11 high 6 Frank NA NA NA low
Veja exatamente como a função case_when() criou os valores para a nova coluna:
- Se o valor na coluna de pontos for maior que 20, o valor na coluna de qualidade será “alto”.
- Caso contrário, se o valor na coluna de pontos for maior que 15, então o valor na coluna de qualidade será “med”.
- Caso contrário, se o valor na coluna de pontos for menor ou igual a 15 (ou um valor ausente, como NA), então o valor na coluna de qualidade será “baixo”.
Exemplo 2: Crie uma nova variável a partir de múltiplas variáveis
O código a seguir mostra como criar uma nova variável chamada qualidade cujos valores são derivados das colunas de pontos e assistência :
df %>% mutate (quality = case_when (points > 15 & assists > 10 ~ ' great ', points > 15 & assists > 5 ~ ' good ', TRUE ~ ' average ' )) player position points assists quality 1 AJ G 12 5 average 2 Bob F 15 7 average 3 Chad F 19 7 good 4 Dan G 22 12 great 5 Eric C 32 11 great 6 Frank NA NA NA average
Observe que também podemos usar a função is.na() para atribuir explicitamente strings a valores NA:
df %>% mutate (quality = case_when (is. na (points) ~ ' missing ', points > 15 & assists > 10 ~ ' great ', points > 15 & assists > 5 ~ ' good ', TRUE ~ ' average ' )) player position points assists quality 1 AJ G 12 5 average 2 Bob F 15 7 average 3 Chad F 19 7 good 4 Dan G 22 12 great 5 Eric C 32 11 great 6 Frank NA NA NA missing
Recursos adicionais
Como organizar linhas em R
Como contar observações por grupo em R
Como filtrar linhas contendo uma determinada string em R