# Carregando pacotes ------------------------------------------------------
library(readr)
# Carregando os dados -----------------------------------------------------
base_de_dados <- read_csv2("dados/voos_de_janeiro.csv")
# Filtrando linhas do data.frame com vetores lógicos --------------
base_de_dados$atraso_chegada
base_de_dados$atraso_chegada == 4 # Retorna um vetor de VERDADEIRO ou FALSO
# Podemos filtrar linhas baseadas no retorno do vetor com TRUE e FALSE,
# sendo que: o que for TRUE ficará na base, e o que for FALSE será removido.
base_de_dados[base_de_dados$origem == "EWR",]
base_de_dados[base_de_dados$origem == "EWR", c("origem", "horario_saida")]
base_de_dados[base_de_dados$tempo_voo > 100, c("tempo_voo", "origem", "destino")]
voos_ewr <- base_de_dados[base_de_dados$origem == "EWR",]
# Podemos combinar!
exemplo_ou <- base_de_dados[base_de_dados$origem == "EWR" | base_de_dados$tempo_voo > 100,]
exemplo_e <- base_de_dados[base_de_dados$origem == "EWR" & base_de_dados$tempo_voo > 100,]
## Exercícios --------------------------------------------------------------
library(dplyr)
# 1. Usando a base de voos, e considerando que as colunas "dia", "mes" e "ano"
# compõem a data de saída do voo, escreva um código que devolva apenas os voos
# que saíram no dia 15/01/2013:
# Considerando mes, dia e ano:
base_de_dados[base_de_dados$ano == 2013 & base_de_dados$mes == 1 & base_de_dados$dia == 15,]
# Considerando que a base já é de janeiro de 2013
base_de_dados[base_de_dados$dia == 15,]
# O mesmo filtro com dplyr: considerando o mes, dia e ano
base_de_dados %>%
filter(ano == 2013, mes == 1, dia == 15)
# O mesmo filtro com dplyr: Considerando que a base já é de janeiro de 2013
base_de_dados %>%
filter(dia == 15)
# 2. Usando a base de voos, escreva um código que devolva apenas os voos
# que NÃO sairam do aeroporto JFK:
base_de_dados[base_de_dados$origem != "JFK",]
# com dplyr
base_de_dados %>%
filter(origem != "JFK")
# 3. Usando a base de voos, escreva um código que devolva apenas os voos
# que sairam do aeroporto JFK, e foram para Atlanta ("ATL"),
# e salve em um objeto chamado voos_jfk_atlanta:
voos_jfk_atlanta <- base_de_dados[base_de_dados$origem == "JFK" & base_de_dados$destino == "ATL",]
# com dplyr
voos_jfk_atlanta <- base_de_dados %>%
filter(origem == "JFK", destino == "ATL")
# 4. Usando a base de voos, escreva um código que devolva apenas os voos
# que saíram nos dias 15/01/2013 ou 16/01/2013:
# base R - com %in% e considerando que a base é de janeiro de 2013
base_de_dados[base_de_dados$dia %in% c(15, 16),]
# base R - com | e considerando que a base é de janeiro de 2013
base_de_dados[base_de_dados$dia == 15 | base_de_dados$dia == 16,]
# base R - com %in% e considerando dia mes e ano
base_de_dados[base_de_dados$dia %in% c(15, 16) & base_de_dados$mes == 1 & base_de_dados$ano == 2013,]
# base R - com | e considerando dia mes e ano
base_de_dados[(base_de_dados$dia == 15 | base_de_dados$dia == 16) & base_de_dados$mes == 1 & base_de_dados$ano == 2013,]
# com dplyr e %in% (resolucao mais elegante!)
base_de_dados %>%
filter(dia %in% c(15,16), mes == 1, ano == 2013)
# com dplyr e |
base_de_dados %>%
filter((dia == 15 | dia == 16) & mes == 1 & ano == 2013)
# filter com dplyr -----------------
# Existe um outro jeito de fazer esse tipo de filtro
# vamos instalar um pacote novo!
# install.packages("dplyr")
library(dplyr)
# podemos escrever de uma forma que não repete o nome "base_de_dados"
exemplo_com_base <- base_de_dados[base_de_dados$tempo_voo > 100,]
# Com o base, os NAs estao por aqui ainda
# filter é usado para filtrar as linhas
#filter(seu_data_frame, CONDICOES)
exemplo_com_dplyr <- filter(base_de_dados, tempo_voo > 100)
# Com o dplyr, os NAs foram removidos
# select é para colunas
select(base_de_dados, ano, mes, dia)
# outros exemplos:
#base_de_dados[base_de_dados$origem == "EWR",]
filter(base_de_dados, origem == "EWR")
#base_de_dados[base_de_dados$origem == "EWR" | base_de_dados$tempo_voo > 100,]
filter(base_de_dados, origem == "EWR" | tempo_voo > 100)
#base_de_dados[base_de_dados$origem == "EWR" & base_de_dados$tempo_voo > 100,]
filter(base_de_dados, origem == "EWR" & tempo_voo > 100)
# opcional: dentro do filter, podemos usar "," ao invés de "&"
# essa é uma comodidade ESPECÍFICA do filter
View(filter(base_de_dados, origem == "EWR", tempo_voo > 100, dia == 1, horario_chegada > 900))
## Exercícios --------------------------------------------------------------
avaliacao_do_cliente <- c(1, 3, 0, 10, 2, 5, 20)
estado_de_nascimento <- c("SP", "PB", "PB", "RJ", "MT", "MT", "PA")
avaliacoes <- data.frame(avaliacao_do_cliente, estado_de_nascimento)
# usando o data.frame "avaliacoes", escreva códigos que atendam os pontos abaixo.
# Se possível, escreva duas versões de cada código: uma com filter e outra usando
# subsetting (os colchetes [])
# 1. Filtre as avaliações superiores a 3.
# base R:
avaliacoes[avaliacoes$avaliacao_do_cliente > 3, ]
# dplyr:
avaliacoes %>%
filter(avaliacao_do_cliente > 3)
# 2. Filtre as avaliações de SP ou MT.
# base R
avaliacoes[avaliacoes$estado_de_nascimento %in% c("SP", "MT"),]
# dplyr
avaliacoes %>%
filter(estado_de_nascimento %in% c("SP", "MT"))
# 3. Filtre as avaliações de PB ou MT com nota inferior a 4.
# base R
avaliacoes[avaliacoes$estado_de_nascimento %in% c("PB", "MT") & avaliacoes$avaliacao_do_cliente < 4,]
# dplyr
avaliacoes %>%
filter(estado_de_nascimento %in% c("PB", "MT"), avaliacao_do_cliente < 4)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.