0Pricing
R Academy · Aula

Resumos agrupados e group_by()

Agregue dados por grupos e calcule estatísticas para cada grupo.

Resumos agrupados e group_by() é uma aula grátis de R Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.

Por que agrupar dados?

Agrupar dados é uma das operações mais poderosas da análise de dados. Em vez de calcular estatísticas sobre todo o conjunto de dados, você as calcula dentro de cada grupo. O pacote dplyr torna isso intuitivo com group_by() seguido de 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)

Noções básicas de group_by()

group_by(col) marca um quadro de dados para que as operações seguintes ocorram por grupo. Ele não altera os dados em si — apenas adiciona metadados de agrupamento. Você pode agrupar por uma ou várias colunas.

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() após group_by()

summarize() (ou summarise()) reduz cada grupo a uma única linha. Você especifica os nomes das novas colunas e as funções de resumo a serem aplicadas. Funções comuns: 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)
  )

Contando com n()

n() dentro de summarize() retorna o número de linhas em cada grupo. Não exige argumentos. Para contar linhas que atendem a uma condição, use sum(condition). n_distinct(col) conta valores únicos.

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

Agrupando por várias colunas

Você pode passar várias colunas para group_by(). Os grupos são formados por cada combinação de valores presente nos dados. Isso é útil para tabulações cruzadas e resumos hierárquicos.

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

O argumento .groups

Após summarize(), o resultado continua agrupado por todas as variáveis de agrupamento, exceto a última. O argumento .groups controla esse comportamento:

  • 'drop_last' — padrão, remove o último nível de agrupamento
  • 'drop' — remove todo o agrupamento
  • 'keep' — mantém todo o agrupamento
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() explicitamente

Você sempre pode chamar ungroup() para remover os metadados de agrupamento de um quadro de dados. Isso é importante quando deseja que as operações seguintes atuem sobre todos os dados, e não por grupo.

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

group_keys() retorna um quadro de dados que mostra as combinações únicas de grupos. n_groups() informa quantos grupos existem. Essas funções são úteis para inspeção antes de executar operações agrupadas.

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

Resumindo com várias estatísticas

Você pode calcular muitas estatísticas de resumo em uma única chamada de summarize(). Combine contagem, média, mediana, desvio-padrão, mínimo, máximo e cálculos personalizados de uma só vez.

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() ciente de grupos

mutate() após group_by() calcula valores dentro de cada grupo, mas mantém todas as linhas (ao contrário de summarize()). Isso é ideal para calcular métricas por grupo que você quer associar a cada linha.

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

Filtrando dentro dos grupos

filter() após group_by() filtra linhas com base em condições no nível do grupo. Por exemplo, mantém apenas o melhor desempenho de cada região ou as linhas cujo valor excede a média do grupo.

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

Verificação rápida

O que o argumento .groups = 'drop' faz em summarize()?

Recapitulação: resumos agrupados

Principais conclusões sobre resumos agrupados:

  • group_by(col) adiciona agrupamento — os dados não mudam, mas as operações passam a considerar os grupos
  • summarize() reduz cada grupo a uma linha — use n(), mean(), sum() etc.
  • .groups = 'drop' garante que o resultado não tenha agrupamento
  • ungroup() remove o agrupamento a qualquer momento
  • group_keys() inspeciona os níveis dos grupos; n_groups() os conta
  • mutate() + group_by() adiciona colunas no nível do grupo sem reduzir o número de linhas
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))

Perguntas Frequentes

A aula “Resumos agrupados e group_by()” é grátis?

Sim — o texto completo de “Resumos agrupados e group_by()” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.

O que vou aprender em “Resumos agrupados e group_by()”?

Agregue dados por grupos e calcule estatísticas para cada grupo. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar R Academy?

Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Resumos agrupados e group_by()”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de R Academy?

Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Resumos agrupados e group_by()
  2. Funções de janela: lag, lead, cumsum
  3. Junções de várias tabelas no dplyr
  4. Avaliação organizada: {{ }} e .data
← Voltar para R Academy