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