Come selezionare la prima riga per gruppo utilizzando dplyr


Spesso potresti voler selezionare la prima riga di ciascun gruppo utilizzando il pacchetto dplyr in R. Per farlo puoi utilizzare la seguente sintassi di base:

 df %>%
  group_by (group_var) %>%
  arrange (values_var) %>%
  filter (row_number()== 1 )

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

Esempio: seleziona la prima riga per gruppo in R

Supponiamo di avere il seguente set di dati in R:

 #create dataset
df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C' ),
                 points=c(4, 9, 7, 7, 6, 13, 8, 8, 4, 17))

#view dataset
df

   team points
1 to 4
2 to 9
3 to 7
4 B 7
5 B 6
6 B 13
7 C 8
8 C 8
9 C 4
10 C 17

Il codice seguente mostra come utilizzare il pacchetto dplyr per selezionare la prima riga per gruppo in R:

 library (dplyr)

df %>%
  group_by (team) %>%
  arrange (points) %>%
  filter (row_number()== 1 )

# A tibble: 3 x 2
# Groups: team [3]
  team points
    
1 to 4
2 C 4
3 B 6

Per impostazione predefinita, organizzare() ordina i valori in ordine crescente ma possiamo facilmente ordinare i valori in ordine decrescente:

 df %>%
  group_by (team) %>%
  arrange ( desc (dots)) %>%
  filter (row_number()== 1 )

# A tibble: 3 x 2
# Groups: team [3]
  team points
    
1 C 17
2 B 13
3 to 9

Tieni presente che puoi facilmente modificare questo codice per selezionare l’ ennesima riga in ciascun gruppo. Basta cambiare row_number() == n .

Ad esempio, se desideri selezionare la 2a riga per gruppo, puoi utilizzare la seguente sintassi:

 df %>%
  group_by (team) %>%
  arrange ( desc (dots)) %>%
  filter (row_number()== 2 )

Oppure puoi utilizzare la seguente sintassi per selezionare l’ultima riga per gruppo:

 df %>%
  group_by (team) %>%
  arrange ( desc (dots)) %>%
  filter (row_number()== n() )

Risorse addizionali

Come disporre le righe in R
Come contare le osservazioni per gruppo in R
Come trovare il valore massimo per gruppo in R

Aggiungi un commento

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