Gegroepeerde samenvattingen en group_by()
Aggregeer gegevens per groep en bereken statistieken per groep.
Gegroepeerde samenvattingen en group_by() is een gratis R Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject R Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus R Academy bevat in totaal 4 lessen.
Waarom gegevens groeperen?
Gegevens groeperen is een van de krachtigste bewerkingen in gegevensanalyse. In plaats van statistieken over een volledige gegevensverzameling te berekenen, bereken je ze binnen elke groep. Het pakket dplyr maakt dit intuïtief met group_by(), gevolgd door 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)De basis van group_by()
group_by(col) markeert een dataframe zodat daaropvolgende bewerkingen per groep plaatsvinden. De gegevens zelf veranderen niet — er wordt metagegevens over de groepering toegevoegd. Je kunt op één of meerdere kolommen groeperen.
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() na group_by()
summarize() (of summarise()) reduceert elke groep tot één rij. Je geeft nieuwe kolomnamen op en de samenvattingsfuncties die je wilt toepassen. Veelgebruikte functies zijn: 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)
)Tellen met n()
n() binnen summarize() retourneert het aantal rijen in elke groep. De functie heeft geen argumenten nodig. Gebruik sum(condition) om rijen te tellen die aan een voorwaarde voldoen. n_distinct(col) telt unieke waarden.
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)
)Op meerdere kolommen groeperen
Je kunt meerdere kolommen doorgeven aan group_by(). De groepen worden gevormd door elke combinatie van waarden die in de gegevens voorkomt. Dit is handig voor kruistabellen en hiërarchische samenvattingen.
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'
)Het argument .groups
Na summarize() blijft het resultaat gegroepeerd op alle groeperingsvariabelen behalve de laatste. Het argument .groups bepaalt dit:
'drop_last'— standaard; het laatste groepsniveau verwijderen'drop'— alle groeperingen verwijderen'keep'— alle groeperingen behouden
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)) # FALSEExpliciet ungroup() gebruiken
Je kunt altijd ungroup() aanroepen om de metagegevens over de groepering uit een dataframe te verwijderen. Dit is belangrijk wanneer je wilt dat volgende bewerkingen op alle gegevens werken, niet per groep.
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() en n_groups()
group_keys() retourneert een dataframe met de unieke groepscombinaties. n_groups() vertelt je hoeveel groepen er zijn. Deze functies zijn handig voor inspectie voordat je gegroepeerde bewerkingen uitvoert.
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))Samenvatten met meerdere statistieken
Je kunt veel samenvattingsstatistieken berekenen in één aanroep van summarize(). Combineer telling, gemiddelde, mediaan, standaardafwijking, minimum, maximum en aangepaste berekeningen in één keer.
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)
)Groepsbewuste mutate()
mutate() na group_by() berekent waarden binnen elke groep, maar behoudt alle rijen (in tegenstelling tot summarize()). Dit is ideaal voor het berekenen van metrieken op groepsniveau die je aan elke rij wilt toevoegen.
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()Binnen groepen filteren
filter() na group_by() filtert rijen op basis van voorwaarden op groepsniveau. Je kunt bijvoorbeeld alleen de best presterende rij per regio behouden, of alleen rijen waarvan de waarde groter is dan het groepsgemiddelde.
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()Korte controle
Wat doet het argument .groups = 'drop' in summarize()?
Samenvatting: gegroepeerde samenvattingen
Belangrijkste punten over gegroepeerde samenvattingen:
group_by(col)voegt een groepering toe — de gegevens blijven ongewijzigd, maar bewerkingen worden groepsbewustsummarize()reduceert elke groep tot één rij — gebruikn(),mean(),sum()enzovoort.groups = 'drop'zorgt ervoor dat het resultaat niet gegroepeerd isungroup()verwijdert de groepering op elk gewenst momentgroup_keys()bekijkt groepsniveaus;n_groups()telt zemutate()+group_by()voegt kolommen op groepsniveau toe zonder rijen te reduceren
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))Leer R met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 43
- Lessen
- 159
Veelgestelde vragen
Is de les “Gegroepeerde samenvattingen en group_by()” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “Gegroepeerde samenvattingen en group_by()”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus R Academy bevat in totaal 4 lessen.
Wat leer ik in “Gegroepeerde samenvattingen en group_by()”?
Aggregeer gegevens per groep en bereken statistieken per groep. Je oefent met R Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met R Academy te beginnen?
Ervaring vooraf is niet nodig. R Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Gegroepeerde samenvattingen en group_by()”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over R Academy?
Ja. Elke les over R Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Gegroepeerde samenvattingen en group_by()
- Windowfuncties: lag, lead, cumsum
- Joins over meerdere tabellen in dplyr
- Tidy evaluation: {{ }} en .data