Aula 03 — Manipulação de Dados com dplyr - parte 1

Professora: Edneide Ramalho

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: nycflights13 e tidyverse
  • Vamos usar a base de dados flihgts para explorar os principais verbos do pacote dplyr
# install.packages("nycflights13")
library(tidyverse)
library(nycflights13)
library(gt)
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 ordem

  • arrange(): 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

  1. 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
  1. Ordene flights para encontrar os voos com os maiores atrasos na partida. Encontre os voos que partiram mais cedo pela manhã.
  1. Ordene flights para encontrar os voos mais rápidos. (Dica: Tente incluir um cálculo matemático dentro da sua função.)
  1. Houve voos todos os dias de 2013?
  1. Que voos viajaram as distâncias mais longas? E quais tiveram as distâncias mais curtas?
  1. Importa a ordem em que você usa filter() e arrange() 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.