exemplos_de_aula/03-comparacoes-logicas-e-NA.R

# 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)
curso-r/202202-intro-programacao documentation built on April 6, 2022, 10:13 p.m.