Dplyr: come utilizzare mutate() con più condizioni


Puoi utilizzare la seguente sintassi di base in dplyr per utilizzare la funzione mutate() per creare una nuova colonna basata su più condizioni:

 library (dplyr)

df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

Questa particolare sintassi crea una nuova colonna chiamata class che assume i seguenti valori:

  • A_Buono se la squadra è pari ad A e i punti sono maggiori o uguali a 20.
  • A_Cattivo se la squadra è pari ad A e i punti sono inferiori a 20.
  • B_Buono se la squadra è pari a B e i punti sono maggiori o uguali a 20.
  • B_Bad se nessuna delle condizioni precedenti è soddisfatta.

L’esempio seguente mostra come utilizzare questa sintassi nella pratica.

Correlato: Come utilizzare case_when() in dplyr

Esempio: utilizzare mutate() in dplyr con più condizioni

Supponiamo di avere il seguente frame di dati in R che contiene informazioni su vari giocatori di basket:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'),
                 points=c(22, 30, 34, 19, 14, 12, 39, 15, 22, 25))

#view data frame
df

   team points
1 to 22
2 to 30
3 to 34
4 to 19
5 to 14
6 B 12
7 B 39
8 B 15
9 B 22
10 B 25

Possiamo usare la seguente sintassi con la funzione mutate() per creare una nuova colonna chiamata class i cui valori sono basati sui valori nelle colonne squadra e punti :

 library (dplyr)
#add new column based on values in team and points columns
df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

#view updated data frame
df

   team points class
1 A 22 A_Good
2 A 30 A_Good
3 A 34 A_Good
4 A 19 A_Bad
5 A 14 A_Bad
6 B 12 B_Bad
7 B 39 B_Good
8 B 15 B_Bad
9 B 22 B_Good
10 B 25 B_Good

  La nuova colonna classe assume valori in base ai valori nelle colonne squadra e punti .

Ad esempio, la prima riga aveva un valore A nella colonna della squadra e un valore in punti maggiore o uguale a 20, quindi ha ricevuto un valore A_Buono nella colonna della nuova classe .

Tieni presente che in questo esempio abbiamo utilizzato il simbolo & come operatore “AND” per verificare se due condizioni erano entrambe vere prima di assegnare un valore nella colonna della classe .

Tuttavia, avremmo potuto usare | simbolo come operatore “OR” per verificare invece se una delle due condizioni è stata soddisfatta prima di assegnare un valore nella colonna della classe .

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in dplyr:

dplyr: come mutare una variabile se la colonna contiene una stringa
dplyr: come modificare i livelli dei fattori utilizzando mutate()
dplyr: come utilizzare la funzione across()

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *