0Pricing
R Academy · Lekcja

Podsumowania grupowane i group_by()

Agreguj dane według grup i obliczaj statystyki dla poszczególnych grup.

Podsumowania grupowane i group_by() to bezpłatna lekcja R Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.

Dlaczego grupować dane?

Grupowanie danych jest jedną z najpotężniejszych operacji w analizie danych. Zamiast obliczać statystyki dla całego zbioru danych, obliczasz je wewnątrz każdej grupy. Pakiet dplyr ułatwia to dzięki funkcji group_by(), po której następuje summarize().

library(dplyr)

# Sample sales data
sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

print(sales)

Podstawy group_by()

group_by(col) oznacza ramkę danych tak, aby kolejne operacje były wykonywane dla każdej grupy. Nie zmienia samych danych — dodaje metadane grupowania. Możesz grupować według jednej lub wielu kolumn.

library(dplyr)

sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

# Group by region
grouped <- sales %>% group_by(region)
print(grouped)
print(group_keys(grouped))

summarize() po group_by()

summarize() (lub summarise()) redukuje każdą grupę do jednego wiersza. Określasz nazwy nowych kolumn oraz funkcje podsumowujące, które mają zostać zastosowane. Typowe funkcje to: n(), mean(), sum(), min(), max().

library(dplyr)

sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

sales %>%
  group_by(region) %>%
  summarize(
    n = n(),
    mean_revenue = mean(revenue),
    total_units = sum(units)
  )

Zliczanie za pomocą n()

n() wewnątrz summarize() zwraca liczbę wierszy w każdej grupie. Nie wymaga argumentów. Aby zliczyć wiersze spełniające warunek, użyj sum(condition). n_distinct(col) zlicza unikalne wartości.

library(dplyr)

employees <- data.frame(
  dept = c('HR','HR','Eng','Eng','Eng','Sales'),
  salary = c(55000, 60000, 95000, 105000, 90000, 70000),
  senior = c(FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
)

employees %>%
  group_by(dept) %>%
  summarize(
    count = n(),
    senior_count = sum(senior),
    avg_salary = mean(salary)
  )

Grupowanie według wielu kolumn

Do funkcji group_by() możesz przekazać wiele kolumn. Grupy są tworzone na podstawie każdej kombinacji wartości występujących w danych. Jest to przydatne w tabelach krzyżowych i hierarchicznych podsumowaniach.

library(dplyr)

orders <- data.frame(
  region = c('North','North','South','South','North','South'),
  product = c('A','B','A','B','A','A'),
  sales = c(100, 200, 150, 250, 120, 180)
)

orders %>%
  group_by(region, product) %>%
  summarize(
    total_sales = sum(sales),
    orders = n(),
    .groups = 'drop'
  )

Argument .groups

Po wykonaniu summarize() wynik nadal jest pogrupowany według wszystkich zmiennych grupujących poza ostatnią. Argument .groups steruje tym zachowaniem:

  • 'drop_last' — wartość domyślna, usuwa ostatni poziom grupowania
  • 'drop' — usuwa całe grupowanie
  • 'keep' — zachowuje całe grupowanie
library(dplyr)

df <- data.frame(
  year = c(2022,2022,2023,2023),
  quarter = c('Q1','Q2','Q1','Q2'),
  revenue = c(100, 120, 130, 150)
)

# .groups = 'drop' ensures ungrouped result
result <- df %>%
  group_by(year, quarter) %>%
  summarize(total = sum(revenue), .groups = 'drop')

print(result)
print(is.grouped_df(result))  # FALSE

Jawne użycie ungroup()

Zawsze możesz wywołać ungroup(), aby usunąć metadane grupowania z ramki danych. Jest to ważne, gdy chcesz, aby kolejne operacje działały na całych danych, a nie osobno dla każdej grupy.

library(dplyr)

df <- data.frame(
  dept = c('HR','HR','Eng','Eng'),
  salary = c(55000, 60000, 95000, 105000)
)

# Without ungroup: rank is within group
df %>%
  group_by(dept) %>%
  mutate(rank_in_dept = rank(salary)) %>%
  ungroup() %>%
  mutate(rank_overall = rank(salary))

group_keys() i n_groups()

group_keys() zwraca ramkę danych pokazującą unikalne kombinacje grup. n_groups() informuje, ile grup istnieje. Funkcje te są przydatne do sprawdzenia struktury danych przed wykonaniem operacji grupowanych.

library(dplyr)

df <- data.frame(
  country = c('US','US','UK','UK','DE'),
  category = c('A','B','A','A','B'),
  value = c(10, 20, 15, 25, 30)
)

grouped <- df %>% group_by(country, category)

cat('Number of groups:', n_groups(grouped), '\n')
print(group_keys(grouped))

Podsumowywanie za pomocą wielu statystyk

W jednym wywołaniu summarize() możesz obliczyć wiele statystyk podsumowujących. Połącz jednocześnie zliczanie, średnią, medianę, odchylenie standardowe, minimum, maksimum i niestandardowe obliczenia.

library(dplyr)

scores <- data.frame(
  class = c('A','A','A','B','B','B','C','C'),
  score = c(85, 90, 78, 92, 88, 95, 70, 75)
)

scores %>%
  group_by(class) %>%
  summarize(
    n = n(),
    mean_score = round(mean(score), 1),
    median_score = median(score),
    sd_score = round(sd(score), 2),
    min_score = min(score),
    max_score = max(score)
  )

mutate() uwzględniające grupy

mutate() użyte po group_by() oblicza wartości wewnątrz każdej grupy, ale zachowuje wszystkie wiersze (w przeciwieństwie do summarize()). Jest to idealne rozwiązanie do obliczania miar na poziomie grupy, które chcesz dołączyć do każdego wiersza.

library(dplyr)

sales <- data.frame(
  region = c('East','East','West','West','West'),
  rep = c('Alice','Bob','Carol','Dave','Eve'),
  revenue = c(150, 200, 120, 180, 160)
)

sales %>%
  group_by(region) %>%
  mutate(
    region_total = sum(revenue),
    pct_of_region = round(100 * revenue / sum(revenue), 1)
  ) %>%
  ungroup()

Filtrowanie wewnątrz grup

filter() użyte po group_by() filtruje wiersze na podstawie warunków dotyczących grupy. Możesz na przykład zachować tylko najlepszego wykonawcę w każdym regionie albo wiersze, w których wartość przekracza średnią grupy.

library(dplyr)

sales <- data.frame(
  region = c('East','East','West','West','North','North'),
  rep = c('Alice','Bob','Carol','Dave','Eve','Frank'),
  revenue = c(150, 200, 120, 180, 95, 130)
)

# Keep the top rep per region
sales %>%
  group_by(region) %>%
  filter(revenue == max(revenue)) %>%
  ungroup()

Szybki test

Co robi argument .groups = 'drop' w funkcji summarize()?

Podsumowanie: podsumowania grupowane

Najważniejsze informacje o podsumowaniach grupowanych:

  • group_by(col) dodaje grupowanie — dane pozostają niezmienione, ale operacje uwzględniają grupy
  • summarize() redukuje każdą grupę do jednego wiersza — używaj n(), mean(), sum() itd.
  • .groups = 'drop' zapewnia, że wynik nie będzie pogrupowany
  • ungroup() usuwa grupowanie w dowolnym momencie
  • group_keys() pozwala sprawdzić poziomy grup; n_groups() je zlicza
  • mutate() + group_by() dodaje kolumny na poziomie grupy bez redukowania liczby wierszy
library(dplyr)

# Full pipeline example
data.frame(
  dept = c('Eng','Eng','HR','HR','Sales'),
  salary = c(95000, 110000, 60000, 65000, 75000)
) %>%
  group_by(dept) %>%
  summarize(
    headcount = n(),
    avg_salary = mean(salary),
    .groups = 'drop'
  ) %>%
  arrange(desc(avg_salary))

Często zadawane pytania

Czy lekcja „Podsumowania grupowane i group_by()” jest bezpłatna?

Tak — pełny tekst „Podsumowania grupowane i group_by()” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podsumowania grupowane i group_by()”?

Agreguj dane według grup i obliczaj statystyki dla poszczególnych grup. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć R Academy?

Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Podsumowania grupowane i group_by()”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?

Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podsumowania grupowane i group_by()
  2. Funkcje okna: lag, lead, cumsum
  3. Łączenie wielu tabel w dplyr
  4. Ewaluacja tidy: {{ }} i .data
← Powrót do R Academy