Come utilizzare case_when() in dplyr
La funzione case_when() del pacchetto dplyr in R può essere utilizzata per creare nuove variabili da variabili esistenti.
Questa funzione utilizza la seguente sintassi di base:
library (dplyr) df %>% mutate (new_var = case_when (var1 < 15 ~ ' low ', var2 < 25 ~ ' med ', TRUE ~ ' high '))
Tieni presente che TRUE equivale a un’istruzione “else”.
I seguenti esempi mostrano come utilizzare in pratica questa funzione con il seguente frame di dati:
#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
Esempio 1: creare una nuova variabile da una variabile esistente
Il codice seguente mostra come creare una nuova variabile chiamata qualità i cui valori derivano dalla colonna punti :
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
Ecco esattamente come la funzione case_when() ha creato i valori per la nuova colonna:
- Se il valore nella colonna dei punti è maggiore di 20, il valore nella colonna della qualità sarà “alto”.
- Altrimenti, se il valore nella colonna punti è maggiore di 15, allora il valore nella colonna qualità sarà “med”.
- Altrimenti, se il valore nella colonna dei punti è inferiore o uguale a 15 (o un valore mancante come NA), il valore nella colonna della qualità sarà “basso”.
Esempio 2: creare una nuova variabile da più variabili
Il codice seguente mostra come creare una nuova variabile chiamata qualità i cui valori derivano dalle colonne points e assist :
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
Nota che possiamo anche usare la funzione is.na() per assegnare esplicitamente stringhe a valori 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
Risorse addizionali
Come disporre le righe in R
Come contare le osservazioni per gruppo in R
Come filtrare le righe contenenti una determinata stringa in R