Come raggruppare per tutte le colonne tranne una in dplyr


È possibile utilizzare la seguente sintassi di base per raggruppare tutte le colonne tranne una in un frame di dati utilizzando il pacchetto dplyr in R:

 df %>%
  group_by(across(c( - this_column)))

Questo particolare esempio raggruppa il frame di dati in base a tutte le colonne tranne quella chiamata this_column .

Tieni presente che il segno negativo ( ) nella formula indica a dplyr di escludere quella particolare colonna nella funzione group_by() .

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

Esempio: raggruppa per tutte le colonne tranne una in dplyr

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', 'B', 'B', 'B', 'B'),
                 position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'),
                 starter=c('Y', 'Y', 'Y', 'N', 'Y', 'N', 'N', 'N'),
                 dots=c(99, 104, 119, 113))

#view data frame
df

  team position starter points
1 AGY 99
2 AGY 104
3 AFY 119
4 AFN 113
5 BGY 99
6 BGN 104
7 BFN 119
8 BFN 113

Supponiamo ora di voler trovare il valore massimo nella colonna dei punti , raggruppato su tutte le altre colonne nel frame di dati.

Possiamo usare la seguente sintassi per fare questo:

 library (dplyr)

#group by all columns except points column and find max points
df %>%
  group_by(across(c( - points))) %>%
  mutate(max_points = max(points))

# A tibble: 8 x 5
# Groups: team, position, starter [6]
  team position starter points max_points
                 
1 AGY 99 104
2 AGY 104 104
3 AFY 119 119
4 AFN 113 113
5 BGY 99 99
6 BGN 104 104
7 BFN 119 119
8 BFN 113 119

Dal risultato possiamo vedere:

  • Il valore in punti massimo per tutti i giocatori con valore di squadra A, valore di posizione G e valore iniziale Y era 104 .
  • Il valore in punti massimo per tutti i giocatori con un valore di squadra A, un valore di posizione F e un valore iniziale di Y era 119 .
  • Il valore in punti massimo per tutti i giocatori con un valore di squadra A, un valore di posizione F e un valore iniziale di N era 113 .

E così via.

Tieni presente che potremmo ottenere lo stesso risultato anche se digitassimo tutti i nomi di colonna tranne i punti nella funzione group_by() :

 library (dplyr)

#group by all columns except points column and find max points
df %>%
  group_by(across(c(team, position, starter))) %>%
  mutate(max_points = max(points))

# A tibble: 8 x 5
# Groups: team, position, starter [6]
  team position starter points max_points
                 
1 AGY 99 104
2 AGY 104 104
3 AFY 119 119
4 AFN 113 113
5 BGY 99 99
6 BGN 104 104
7 BFN 119 119
8 BFN 113 119

Ciò corrisponde al risultato dell’esempio precedente.

Tuttavia, tieni presente che è molto più semplice escludere la colonna dei punti nella funzione group_by() piuttosto che digitare i nomi di tutte le altre colonne.

Risorse addizionali

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

Come filtrare le righe contenenti una determinata stringa utilizzando dplyr
Come calcolare le frequenze relative utilizzando dplyr
Come selezionare la prima riga per gruppo utilizzando dplyr

Aggiungi un commento

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