# install.packages("nycflights13")
library(tidyverse)
library(nycflights13)
library(gt)Aula 03 — Manipulação de Dados com dplyr - parte 1
27/04/2026
Aula baseada no Capítulo 3 do livro: R for Data Science https://learning.oreilly.com/library/view/r-for-data/9781492097396/ch03.html#data-transform-prerequisites
1 Transformação de dados
Nem sempre os dados estão da maneira que queremos. Muitas vezes temos que:
criar novas variáveis
criar sumários para responder perguntas
renomear variáveis
reordenar observações
Por isso, vamos aprender ferramentas para fazer isso usando o pacote dplyr`.
2 Pré-requisitos
- Carregar pacotes:
nycflights13etidyverse - Vamos usar a base de dados
flihgtspara explorar os principais verbos do pacotedplyr
dados <- flights
glimpse(dados)
# View(dados)3 dplyr básico
Antes de aprender os verbos (funções), temos que entender o que tem em comum:
O primeiro argumento é sempre um dataframe (base de dados).
Os argumentos subsequentes descrevem em que colunas vamos fazer as operações, usando o nome das variáveis sem aspas
A saída sempre será um novo dataframe.
Para combinar múltiplos verbos, usamos o operador Pipe (|>), que basicamente encadeia as funções. (Atalho no teclado: Ctrl + Shift + M ou Cmd (⌘) + Shift + M) Vamos ver um exemplo:
(se quiser ver um pouco mais sobre os dados: ?flights)
dados |>
filter(dest == "IAH") |>
group_by(year, month, day) |>
summarize(
arr_delay = mean(arr_delay, na.rm = TRUE)
)airports |>
filter(faa == "IAH") |> gt()O que estamos fazendo aqui?
- Filtramos para o destino “IAH”
- Agrupamos por ano, mês e dia
- Calculamos a média de tempo de atraso na chegada para cada grupo
Os verbos do dplyr são organizados em 4 grupos baseado em suas operações:
linhas
colunas
grupos
tabelas
3.1 Linhas
Os verbos mais importantes são:
filter(): escolhe que linhas são mostradas sem alterar a ordemarrange(): muda a ordem das linhas sem alterar o que é apresentado.distinct(): encontra linhas com valores únicos, também pode modificar colunas
3.1.1 filter()
- Voos que se atrasaram em mais de duas horas:
dados |>
filter(dep_delay > 120)Podemos usar qualquer sinal de comparação: >=, <=, <, == (sinal de igualdade); podemos usar
&ou,para “E” e|para “OU”.Voos que partiram em 1 de Janeiro:
dados |>
filter(month == 1, day == 1)- Voos que partiram em Janeiro ou Fevereiro:
dados |>
filter(month == 1 | month == 2)- Também podemos usar
%in%para quando o filtro está em uma lista, por exemplo:
dados |>
filter(month %in% c(1, 2))3.1.2 arrange()
- Muda a ordem das linhas baseada no valor das colunas:
dados |>
arrange(year, month, day, dep_time)- Se quiser que a ordenação seja em ordem decrescente, devemos usar
desc():
dados |>
arrange(desc(dep_delay))O tempo de atraso de saída dep_delay está ordenado do maior para o menor tempo de atraso.
3.1.3 distinct()
- Encontra todas as linhas distintas no dataset, opera nas linhas. Isso ajuda a remover linhas duplicadas se houver.
dados |>
distinct()- Encontrando todos os pares distintos de origem e destino:
dados |>
distinct(origin, dest)Temos 224 pares distintos de destino e chegada.
- Se você quiser manter todas as outras colunas use
.keep_all = TRUE
dados |>
distinct(origin, dest, .keep_all = TRUE)Note que todos os voos estão com data 1 de janeiro, porque encontramos a primeira linha única e depois descartamos o resto.
- Se quisermos saber o número de ocorrências para cada combinação usamos o verbo
count()(que veremos mais a frente):
dados |>
count(origin, dest, sort = TRUE)3.1.4 Exercícios
- Em um único pipeline para cada condição, encontre todos os voos que atendem à condição:
- Tiveram um atraso na chegada de duas horas ou mais
- Voaram para Houston (IAH ou HOU)
- Foram operados pela United (UA), American (AA) ou Delta (DL)
- Partiram no verão (julho, agosto e setembro)
- Chegaram com mais de duas horas de atraso, mas não saíram atrasados
- Tiveram um atraso de pelo menos uma hora, mas compensaram mais de 30 minutos durante o voo
- Ordene
flightspara encontrar os voos com os maiores atrasos na partida. Encontre os voos que partiram mais cedo pela manhã.
- Ordene
flightspara encontrar os voos mais rápidos. (Dica: Tente incluir um cálculo matemático dentro da sua função.)
- Houve voos todos os dias de 2013?
- Que voos viajaram as distâncias mais longas? E quais tiveram as distâncias mais curtas?
- Importa a ordem em que você usa
filter()earrange()quando utiliza os dois juntos? Por quê ou por que não? Pense nos resultados e na quantidade de trabalho que as funções teriam que fazer.