# Comparações lógicas ------------------------------------------------------
# Valores lógicos
class(TRUE) # valor 1
class(FALSE) # valor 0
# TRUE e FALSE são nomes reservados
TRUE <- 1
x <- 1
# y = 1 # não é boa prática mas funciona.
# Testes com resultado verdadeiro
x == 1
"a" == "a"
# Testes com resultado falso
x == 2
"a" == "b"
"A" == "a"
# Maior
x > 3
x > 0
# Maior ou igual
x > 1
x >= 1
# Menor
x < 3
x < 0
# Menor ou igual
x < 1
x <= 1
# Diferente
x != 1
x != 2
x %in% c(1, 2, 3)
"a" %in% c("b", "c")
## Operadores lógicos também podem ser usados com vetores
numeros <- c(4, 8, 15, 16, 23, 42)
# vetor de lógicos que compara os elementos de "numeros",
# um por um, com o número 20
numeros < 20
# [1] TRUE TRUE TRUE TRUE FALSE FALSE
# vetor de lógicos que compara os elementos de "numeros",
# um por um, com o número 23
numeros == 23
# [1] FALSE FALSE FALSE FALSE TRUE FALSE
numeros %in% c(0:10)
# [1] TRUE TRUE FALSE FALSE FALSE FALSE
## Comparações lógicas serão a base dos filtros!
numeros <- c(4, 8, 15, 16, 23, 42)
# seleciona apenas o primeiro elemento do vetor "numeros"
numeros[c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE)]
# numeros[.....]
# seleciona apenas aqueles elementos do vetor "numeros" que forem iguais a 15
numeros[numeros == 15]
numeros[numeros %in% c(1:10)]
# Exercícios --------------------------------------------------------------
# 1. Escreva um código que devolva apenas os valores maiores
# ou iguais a 10 do vetor abaixo:
vetor <- c(4, 8, 10, 15, 16, 23, 42)
vetor[vetor >= 10]
# Operadores lógicos ----------
## & - E - Para ser verdadeiro, os dois lados
# precisam resultar em TRUE
x <- 5
x >= 3
x <= 7
x >= 3 & x <=7
y <- 2
y >= 3 & y <= 7
## | - OU - Para ser verdadeiro, apenas um dos
# lados precisa ser verdadeiro
y <- 2
y >= 3 | y <=7
y <- 1
y >= 3 | y == 0
## O mesmo acontece com vetores
x_vetor <- c(89, 36, 96, 10, 99, 39)
y_vetor <- c(53, 30, 15, 54, 34, 60)
x_vetor > 50 | y_vetor < 10
x_vetor <= 50 & y_vetor > 10
## ! - Negação - É o "contrário"
#
!TRUE
!FALSE
# exemplo didático
#!aeroporto %in% c("aeroporto 1", "aeroporto 2")
w <- 5
(!w < 4)
!(x_vetor > 50 | y_vetor < 10)
# Valores especiais -------------------------------------------------------
# Existem valores reservados para representar dados faltantes,
# infinitos, e indefinições matemáticas.
NA # (Not Available) significa dado faltante/indisponível.
NaN # (Not a Number) representa indefinições matemáticas, como 0/0 e log(-1).
# Um NaN é um NA, mas a recíproca não é verdadeira.
Inf # (Infinito) é um número muito grande ou o limite matemático, por exemplo,
# 1/0 e 10^310. Aceita sinal negativo -Inf.
NULL # representa a ausência de objeto (no R).
# Comparações lógicas
idade_ana <- 30
idade_beto <- NA
idade_carla <- NA
idade_ana == idade_beto
idade_beto == idade_carla
5 == NA
# Use as funções is.na(), is.nan(), is.infinite() e is.null()
# para testar se um objeto é um desses valores.
x <- NA
is.na(x)
0 / 0 == NaN
is.nan(0 / 0)
idades <- c(15, 64, 31, NA, 59)
is.na(idades)
is.nan(NaN)
is.infinite(10 ^ 309)
is.null(NULL)
# Dataframes e funções ------------
base_de_dados <- readr::read_csv2("dados/voos_de_janeiro.csv")
dplyr::glimpse(base_de_dados)
# E se quisermos calcular coisas com a coluna atraso_chegada?
sum(base_de_dados$atraso_chegada)
# A coluna atraso_chegada possui NA, por isso a soma dela será NA!
# Verificando os NA:
is.na(base_de_dados$atraso_chegada) # retornará um vetor com TRUE e FALSE,
# sendo que TRUE representa a presença de NA.
sum(is.na(base_de_dados$atraso_chegada)) # Quantos NA tem na coluna?
# Assim somaremos quantos NA tem na coluna,
# pois cada TRUE (presença de NA) será contabilizado como 1.
# contar quantas observacoes da coluna atraso_chegada NAO sao NA:
sum(!is.na(base_de_dados$atraso_chegada))
# ... e se quisermos ignorar o NA?
# Algumas funções possuem um argumento para remover os NA:
# na.rm = TRUE
# Qual é a soma ....?
sum(base_de_dados$atraso_chegada, na.rm = TRUE)
# Menor valor encontrado: o menor número encontrado na coluna
min(base_de_dados$atraso_chegada, na.rm = TRUE)
# Maior valor encontrado: o maior número encontrado na coluna
max(base_de_dados$atraso_chegada, na.rm = TRUE)
# Média
mean(base_de_dados$atraso_chegada, na.rm = TRUE)
# Mediana
median(base_de_dados$atraso_chegada, na.rm = TRUE)
# Variância
var(base_de_dados$atraso_chegada, na.rm = TRUE)
# Desvio padrão
sd(base_de_dados$atraso_chegada, na.rm = TRUE)
# Exercícios ------------------------------------------
# 1. Calcule o valor mínimo e valor máximo da coluna "atraso_saida". O que
# esses valores significam?
min(base_de_dados$atraso_saida, na.rm = TRUE)
max(base_de_dados$atraso_saida, na.rm = TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.