R Academy · Lektion

Grupperade sammanfattningar och group_by()

Aggregera data efter grupper och beräkna statistik per grupp.

Lektion 1 av 413 steg

Grupperade sammanfattningar och group_by() är en gratis lektion i R Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för R Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i R Academy innehåller totalt 4 lektioner.

Varför gruppera data?

Att gruppera data är en av de mest kraftfulla operationerna inom dataanalys. I stället för att beräkna statistik för hela datauppsättningen beräknar du den inom varje grupp. Paketet dplyr gör detta intuitivt med group_by() följt av 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)

Grunderna i group_by()

group_by(col) markerar en data frame så att efterföljande operationer utförs per grupp. Själva datan ändras inte – grupperingens metadata läggs till. Du kan gruppera efter en eller flera kolumner.

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() efter group_by()

summarize() (eller summarise()) reducerar varje grupp till en enda rad. Du anger nya kolumnnamn och de sammanfattningsfunktioner som ska användas. Vanliga funktioner är: 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)
  )

Räkna med n()

n() i summarize() returnerar antalet rader i varje grupp. Funktionen kräver inga argument. Om du vill räkna rader som uppfyller ett villkor använder du sum(condition). n_distinct(col) räknar unika värden.

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)
  )

Gruppera efter flera kolumner

Du kan skicka flera kolumner till group_by(). Grupperna skapas utifrån varje kombination av värden som förekommer i datan. Detta är användbart för korstabeller och hierarkiska sammanfattningar.

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'
  )

Argumentet .groups

Efter summarize() är resultatet fortfarande grupperat efter alla utom den sista grupperingsvariabeln. Argumentet .groups styr detta:

  • 'drop_last' – standardvärde, tar bort den sista gruppnivån
  • 'drop' – tar bort all gruppering
  • 'keep' – behåller all gruppering
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

ungroup() uttryckligen

Du kan alltid anropa ungroup() för att ta bort grupperingens metadata från en data frame. Det är viktigt när du vill att efterföljande operationer ska gälla hela datan och inte utföras per grupp.

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() och n_groups()

group_keys() returnerar en data frame som visar de unika gruppkombinationerna. n_groups() anger hur många grupper som finns. Dessa funktioner är praktiska för inspektion innan du utför grupperade operationer.

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))

Sammanfatta med flera statistiska mått

Du kan beräkna många sammanfattande statistiska mått i ett enda anrop till summarize(). Kombinera antal, medelvärde, median, standardavvikelse, minimum, maximum och egna beräkningar på en gång.

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)
  )

Gruppmedveten mutate()

mutate() efter group_by() beräknar värden inom varje grupp men behåller alla rader (till skillnad från summarize()). Det passar perfekt när du vill beräkna mått på gruppnivå och koppla dem till varje rad.

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()

Filtrera inom grupper

filter() efter group_by() filtrerar rader utifrån villkor på gruppnivå. Du kan till exempel behålla endast den bästa prestationen per region eller rader där värdet överstiger gruppens medelvärde.

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()

Snabbkontroll

Vad gör argumentet .groups = 'drop' i summarize()?

Repetition: grupperade sammanfattningar

Viktiga slutsatser om grupperade sammanfattningar:

  • group_by(col) lägger till gruppering – datan ändras inte, men operationerna blir gruppmedvetna
  • summarize() reducerar grupperna till en rad per grupp – använd n(), mean(), sum() med flera
  • .groups = 'drop' säkerställer att resultatet inte är grupperat
  • ungroup() tar bort grupperingen när som helst
  • group_keys() granskar gruppnivåerna; n_groups() räknar dem
  • mutate() + group_by() lägger till kolumner på gruppnivå utan att reducera antalet rader
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))
Gratis att börja

Lär dig R med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
43
Lektioner
159

Vanliga frågor

Är lektionen ”Grupperade sammanfattningar och group_by()” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen R Academy, inklusive ”Grupperade sammanfattningar och group_by()”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i R Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Grupperade sammanfattningar och group_by()”?

Aggregera data efter grupper och beräkna statistik per grupp. Ni övar på R Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig R Academy?

Du behöver inga förkunskaper. Utbildningen i R Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Grupperade sammanfattningar och group_by()”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här R Academy-lektionen?

Ja. Varje R Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grupperade sammanfattningar och group_by()
  2. Fönsterfunktioner: lag, lead, cumsum
  3. Kopplingar mellan flera tabeller i dplyr
  4. Tidy evaluation: {{ }} och .data
← Tillbaka till R Academy