Dplyr: come mutare una variabile se la colonna contiene una stringa


È possibile utilizzare la seguente sintassi di base in dplyr per modificare una variabile se una colonna contiene una stringa particolare:

 library (dplyr)

df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector ))

Questa particolare sintassi applica la funzione scale() a ciascuna variabile nel frame di dati che contiene la stringa “starter” nel nome della colonna.

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

Esempio: mutare la variabile se la colonna contiene una stringa

Supponiamo di avere il seguente frame di dati in R:

 #create data frame
df <- data. frame (team=c('A', 'B', 'C', 'D', 'E', 'F'),
                 starter_points=c(22, 26, 25, 13, 15, 22),
                 starter_assists=c(4, 5, 10, 14, 12, 10),
                 bench_points=c(7, 7, 9, 14, 13, 10),
                 bench_assists=c(2, 5, 5, 4, 9, 14))

#view data frame
df

  team starter_points starter_assists bench_points bench_assists
1 to 22 4 7 2
2 B 26 5 7 5
3 C 25 10 9 5
4 D 13 14 14 4
5 E 15 12 13 9
6 F 22 10 10 14

Possiamo utilizzare la seguente sintassi per applicare la funzione scale() a ciascuna variabile nel frame di dati che contiene la stringa “starter” nel nome della colonna.

 library (dplyr)

#apply scale() function to each variable that contains 'starter' in the name
df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector ))

  team starter_points starter_assists bench_points bench_assists
1 A 0.2819668 -1.3180158 7 2
2 B 1.0338784 -1.0629159 7 5
3 C 0.8459005 0.2125832 9 5
4 D -1.4098342 1.2329825 14 4
5 E -1.0338784 0.7227828 13 9
6 F 0.2819668 0.2125832 10 14

Utilizzando questa sintassi, siamo stati in grado di applicare la funzione scale() per ridimensionare ciascuna colonna contenente “starter” in modo tale che i loro valori ora abbiano una media pari a 0 e una deviazione standard pari a 1.

Tieni presente che sono state modificate le seguenti colonne:

  • punti_iniziatori
  • starter_assist

Tutte le altre colonne sono rimaste invariate.

Tieni inoltre presente che possiamo applicare qualsiasi funzione desideriamo utilizzando questa sintassi.

Nell’esempio precedente abbiamo scelto di ridimensionare ciascuna colonna con la stringa “starter” nel nome.

Potremmo però fare qualcosa di più semplice, come moltiplicare i valori per due per ogni colonna con “starter” nel nome:

 library (dplyr)

#multiply values by two for each variable that contains 'starter' in the name
df %>% mutate_at(vars(contains(' starter ')), ~ (. * 2 ))

  team starter_points starter_assists bench_points bench_assists
1 A 44 8 7 2
2 B 52 10 7 5
3 C 50 20 9 5
4 D 26 28 14 4
5 E 30 24 13 9
6 F 44 20 10 14

Da notare che i valori delle colonne starter_points e start_assists sono stati moltiplicati per due, mentre tutte le altre colonne sono rimaste invariate.

Risorse addizionali

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

Come eliminare righe utilizzando dplyr
Come selezionare le colonne per indice utilizzando dplyr
Come filtrare le righe contenenti una determinata stringa utilizzando dplyr

Aggiungi un commento

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