Gruppierte Zusammenfassungen und group_by()
Aggregieren Sie Daten nach Gruppen und berechnen Sie gruppenbezogene Statistiken.
Gruppierte Zusammenfassungen und group_by() ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Daten gruppieren?
Das Gruppieren von Daten gehört zu den leistungsfähigsten Operationen in der Datenanalyse. Statt Statistiken für den gesamten Datensatz zu berechnen, berechnen Sie sie innerhalb jeder Gruppe. Das Paket dplyr macht dies mit group_by(), gefolgt von summarize(), intuitiv.
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)Grundlagen von group_by()
group_by(col) kennzeichnet einen Dataframe so, dass nachfolgende Operationen pro Gruppe ausgeführt werden. Die Daten selbst werden nicht verändert – es werden lediglich Gruppierungsmetadaten hinzugefügt. Sie können nach einer oder mehreren Spalten gruppieren.
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() nach group_by()
summarize() (oder summarise()) fasst jede Gruppe zu einer einzigen Zeile zusammen. Sie geben neue Spaltennamen und die anzuwendenden Zusammenfassungsfunktionen an. Häufige Funktionen sind: 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)
)Zählen mit n()
n() innerhalb von summarize() gibt die Anzahl der Zeilen in jeder Gruppe zurück. Die Funktion benötigt keine Argumente. Um Zeilen zu zählen, die eine Bedingung erfüllen, verwenden Sie sum(condition). n_distinct(col) zählt eindeutige Werte.
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)
)Nach mehreren Spalten gruppieren
Sie können mehrere Spalten an group_by() übergeben. Die Gruppen werden anhand jeder im Datensatz vorhandenen Kombination von Werten gebildet. Dies ist für Kreuztabellen und hierarchische Zusammenfassungen nützlich.
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'
)Das Argument .groups
Nach summarize() bleibt das Ergebnis nach allen Gruppierungsvariablen außer der letzten gruppiert. Das Argument .groups steuert dieses Verhalten:
'drop_last'– Standardwert, entfernt die letzte Gruppierungsebene'drop'– entfernt alle Gruppierungen'keep'– behält alle Gruppierungen bei
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)) # FALSEGruppierung mit ungroup() explizit aufheben
Sie können jederzeit ungroup() aufrufen, um die Gruppierungsmetadaten aus einem Dataframe zu entfernen. Das ist wichtig, wenn nachfolgende Operationen auf den vollständigen Daten und nicht pro Gruppe ausgeführt werden sollen.
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() und n_groups()
group_keys() gibt einen Dataframe zurück, der die eindeutigen Gruppenkombinationen zeigt. n_groups() teilt Ihnen mit, wie viele Gruppen vorhanden sind. Diese Funktionen sind nützlich zur Inspektion vor gruppierten Operationen.
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))Zusammenfassen mit mehreren Statistiken
Sie können viele zusammenfassende Statistiken in einem einzigen Aufruf von summarize() berechnen. Kombinieren Sie Zählung, Mittelwert, Median, Standardabweichung, Minimum, Maximum und benutzerdefinierte Berechnungen in einem Schritt.
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)
)Gruppenbezogenes mutate()
mutate() nach group_by() berechnet Werte innerhalb jeder Gruppe, behält aber alle Zeilen bei (anders als summarize()). Das eignet sich ideal, um Kennzahlen auf Gruppenebene zu berechnen und an jede Zeile anzuhängen.
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()Innerhalb von Gruppen filtern
filter() nach group_by() filtert Zeilen anhand von Bedingungen auf Gruppenebene. Sie können beispielsweise nur die leistungsstärkste Person pro Region oder Zeilen behalten, deren Wert über dem Gruppenmittelwert liegt.
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()Schnelltest
Was bewirkt das Argument .groups = 'drop' in summarize()?
Rückblick: Gruppierte Zusammenfassungen
Die wichtigsten Erkenntnisse zu gruppierten Zusammenfassungen:
group_by(col)fügt eine Gruppierung hinzu – die Daten bleiben unverändert, aber die Operationen berücksichtigen die Gruppensummarize()fasst jede Gruppe zu einer Zeile zusammen – verwenden Sien(),mean(),sum()usw..groups = 'drop'stellt sicher, dass das Ergebnis nicht gruppiert istungroup()entfernt die Gruppierung jederzeitgroup_keys()untersucht die Gruppierungsebenen;n_groups()zählt siemutate()+group_by()fügt Spalten auf Gruppenebene hinzu, ohne Zeilen zusammenzufassen
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))Lerne R mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 43
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „Gruppierte Zusammenfassungen und group_by()“ kostenlos?
Ja — der vollständige Text von „Gruppierte Zusammenfassungen und group_by()“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Gruppierte Zusammenfassungen und group_by()“?
Aggregieren Sie Daten nach Gruppen und berechnen Sie gruppenbezogene Statistiken. Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um R Academy zu starten?
Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Gruppierte Zusammenfassungen und group_by()“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?
Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Gruppierte Zusammenfassungen und group_by()
- Window-Funktionen: lag, lead, cumsum
- Joins über mehrere Tabellen in dplyr
- Tidy Evaluation: {{ }} und .data