Hoe u de eerste rij per groep selecteert met dplyr


Vaak wilt u misschien de eerste rij van elke groep selecteren met behulp van het dplyr- pakket in R. U kunt hiervoor de volgende basissyntaxis gebruiken:

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

Het volgende voorbeeld laat zien hoe u deze functie in de praktijk kunt gebruiken.

Voorbeeld: selecteer de eerste rij per groep in R

Stel dat we de volgende dataset in R hebben:

 #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

De volgende code laat zien hoe u het dplyr-pakket gebruikt om de eerste rij per groep in R te selecteren:

 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

Standaard sorteert arrange() waarden in oplopende volgorde, maar we kunnen waarden eenvoudig in aflopende volgorde sorteren:

 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

Merk op dat u deze code eenvoudig kunt wijzigen om de zoveelste rij in elke groep te selecteren. Verander gewoon row_number() == n .

Als u bijvoorbeeld de 2e rij per groep wilt selecteren, kunt u de volgende syntaxis gebruiken:

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

Of u kunt de volgende syntaxis gebruiken om de laatste rij per groep te selecteren:

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

Aanvullende bronnen

Hoe lijnen in R te rangschikken
Hoe observaties per groep te tellen in R
Hoe de maximale waarde per groep in R te vinden

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert