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)) # FALSEungroup() 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 grupossummarize()reduz cada grupo a uma linha — usen(),mean(),sum()etc..groups = 'drop'garante que o resultado não tenha agrupamentoungroup()remove o agrupamento a qualquer momentogroup_keys()inspeciona os níveis dos grupos;n_groups()os contamutate()+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
- Resumos agrupados e group_by()
- Funções de janela: lag, lead, cumsum
- Junções de várias tabelas no dplyr
- Avaliação organizada: {{ }} e .data