# 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)