Jak grupować według wszystkich kolumn z wyjątkiem jednej w dplyr


Możesz użyć następującej podstawowej składni, aby zgrupować wszystkie kolumny z wyjątkiem jednej w ramce danych przy użyciu pakietu dplyr w R:

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

Ten konkretny przykład grupuje ramkę danych według wszystkich kolumn z wyjątkiem tej o nazwie this_column .

Należy zauważyć, że znak ujemny ( ) we wzorze informuje dplyr, aby wykluczył tę konkretną kolumnę z funkcji group_by() .

Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.

Przykład: grupuj według wszystkich kolumn z wyjątkiem jednej w dplyr

Załóżmy, że mamy następującą ramkę danych w R, która zawiera informacje o różnych koszykarzach:

 #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

Załóżmy teraz, że chcemy znaleźć maksymalną wartość w kolumnie punktów , pogrupowaną we wszystkich pozostałych kolumnach ramki danych.

W tym celu możemy użyć następującej składni:

 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

Z wyniku możemy zobaczyć:

  • Maksymalna wartość punktowa dla wszystkich graczy z wartością drużyny A, wartością pozycji G i wartością początkową Y wyniosła 104 .
  • Maksymalna wartość punktowa dla wszystkich graczy z wartością drużyny A, wartością pozycji F i wartością początkową Y wyniosła 119 .
  • Maksymalna wartość punktowa dla wszystkich graczy z wartością drużyny A, wartością pozycji F i wartością początkową N wyniosła 113 .

I tak dalej.

Zauważ, że ten sam wynik moglibyśmy uzyskać, jeśli w funkcji group_by() wpisalibyśmy nazwy wszystkich kolumn z wyjątkiem kropek :

 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

Odpowiada to wynikowi z poprzedniego przykładu.

Należy jednak pamiętać, że znacznie łatwiej jest wykluczyć kolumnę punktów w funkcji group_by() niż wpisywać nazwy wszystkich pozostałych kolumn.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania za pomocą dplyr:

Jak filtrować wiersze zawierające określony ciąg za pomocą dplyr
Jak obliczyć częstotliwości względne za pomocą dplyr
Jak wybrać pierwszy wiersz według grupy za pomocą dplyr

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *