R
Antonio Vinícius Barbosa

Nesta parte, veremos mais alguns pacotes importantes para a manipulação de dados no R:
lubridate: pacote para manipular variáveis contendo datas.stringr: manipulação de variáveis de texto (characters ou strings).forcats: manipulação de fatores.REm muitas situações, é necessário manipular informações que contêm datas a fim de capturar, por exemplo, o intervalo de tempo entre dois eventos ou a dinâmica temporal de uma variável.
O pacote lubridate possui diversas funções que facilitam a manipulação de datas.
Foi criado por Garrett Grolemund e Hadley Wickham e faz parte do conjunto de pacotes do tidyverse. Ver documentação oficial.
RNesta seção, veremos como:
DateVariáveis que contêm datas são tratadas como um tipo especial de objeto, da classe Date. Para criar um objeto dessa classe, fazemos:
A função as.Date() transforma objetos na classe Date, porém com um valor inesperado. Tal função se ajusta apenas para datas do tipo yyyy-mm-dd.
lubridatePara lidar com datas do tipo dd-mm-yyyy, o pacote lubridate oferece a função dmy() (day, month, year):
Para os demais ordenações de datas, o pacote oferece as variações dym(), mdy(),
myd(), ymd() e ydm().
lubridatePodemos transformar diversos formatos para a classe Date:
lubridateAlém de datas, podemos adicionar as horas. Para isso, basta identificar a ordem do year(y), month(m), day(d), hour(h), minute(m) e second(s)
lubridatePara extrair informações instantâneas do sistema, fazemos:
O último bloco de informações da função now() corresponde ao fuso horário.
lubridateHá diversas funções para extrair informações de um objeto da classe Date:
# Extrair data
date(hora_atual)
## [1] "2024-03-26"
# Extrair ano
year(hora_atual)
## [1] 2024
# Extrair mes
month(hora_atual)
## [1] 3
# Extrair dia do mes
day(hora_atual)
## [1] 26
# Extrair hora
hour(hora_atual)
## [1] 11
# Extrair minutos
minute(hora_atual)
## [1] 24
# Extrair segundos
second(hora_atual)
## [1] 47.46304lubridateOutras informações de um objeto da classe Date:
Outras informações:
Intervalos de datas são realizados areavés da função interval()
# Datas
data_inic <- ymd("2023-04-08")
data_fim <- ymd("2023-06-16")
# Intervalo de datas
periodo <- interval(data_inic, data_fim)
periodo
## [1] 2023-04-08 UTC--2023-06-16 UTC
# Outra notação (operador intervalo %--%)
periodo <- data_inic %--% data_fim
periodo
## [1] 2023-04-08 UTC--2023-06-16 UTC
evento <- ymd("2023-12-10")
evento %within% periodo
## [1] FALSEAlgumas operações aritméticas disponíveis são:
# Adição de datas
today() + days(5)
## [1] "2024-03-31"
today() + years(2)
## [1] "2026-03-26"
# Datas recorrentes
aulas <- today() + weeks(1:2)
aulas
## [1] "2024-04-02" "2024-04-09"
# Diferença de datas
as.period(periodo); as.period(periodo, unit = "day")
## [1] "2m 8d 0H 0M 0S"
## [1] "69d 0H 0M 0S"RPOSIXct e POSIXlt.POSIXct é útil para datas que contenham horas.POSIXlt facilita a extração de componentes da data.lubridate é um wrapper para manipular as duas classes, com uma sintaxe mais simples e intuitiva.lubridate apropriada para analisar cada uma das seguintes datas:Para este exercício, será necessário utilizar a base dados::voos
glimpse().distancia e tempo_voo (medida em minutos).stringr traz uma sintaxe mais consistente e simples para manipular tais variáveis.stringrtidyversestr_stringr::str_ e visualizar todas as funções com este prefixostringrAlgumas funções básicas para manipulação de caracteres:
stringrstringr# Variavel sexo
sexo_quest <- c("M", "F", " M", "F ", " M ")
sexo_quest
## [1] "M" "F" " M" "F " " M "
# Remover espacos em branco
sexo <- str_trim(sexo_quest)
sexo
## [1] "M" "F" "M" "F" "M"
# Remover espacos em branco em qualquer parte
str_squish(" Este texto está com espaços ")
## [1] "Este texto está com espaços"
# Concatenar strings
pre <- "O status é:"
status <- "APROVADO"
str_c(pre, status, sep = " ")
## [1] "O status é: APROVADO"
# Excluir padrões
id_var <- c("id1", "id2", "id3")
str_replace(id_var, "id", "")
## [1] "1" "2" "3"stringrPara dividir elementos de uma string baseada em um caractere específico, utilizamos a função str_split():
# Inserir texto
texto <- c("Lorem ipsum dolor sit amet")
# Dividir string (em lista)
str_split(texto, " ")
## [[1]]
## [1] "Lorem" "ipsum" "dolor" "sit" "amet"
# Dividir string (em matriz)
str_split(texto, " ", simplify = TRUE)
## [,1] [,2] [,3] [,4] [,5]
## [1,] "Lorem" "ipsum" "dolor" "sit" "amet"stringrPara adicionar caracteres e ajustar em um tamanho fixo, utilizamos a função str_pad()
O CPF é um número composto por 11 dígitos. Por exemplo, 54491651884. No entanto, para facilitar a visualização, costumamos mostrá-lo com separadores a cada 3 casas: 544.916.518-84. Como obter esse padrão utilizando unicamente as funções do pacote stringr?
Suponha que tenhamos o seguinte endereço em uma URL: https://www.ibge.gov.br/cidades-e-estados/pb/campina-grande.html Transforme o endereço no formato identificador Campina Grande (PB)
forcats Até o momento, vimos a existência de objetos da classe factor. De forma geral:
As principais funções do pacote forcats auxiliam na reordenação das categorias e na modificação dos níveis de um fator.
Fatores são estruturas de dados utilizadas para ordenar strings. Formalmente, um fator é definido como um vetor de integers com dois atributos específicos:
factor.Suponha um vetor com as disciplinas preferidas dos alunos em uma dado semestre:
Fatores são estruturas úteis que permitem ter maior controle durante a análise dos dados:
forcatsPara entender as funcionalidades do pacote forcats, utilizaremos o banco de dados airquality:
tibble::glimpse(airquality)
## Rows: 153
## Columns: 6
## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, 18, 14, …
## $ Solar.R <int> 190, 118, 149, 313, NA, NA, 299, 99, 19, 194, NA, 256, 290, 27…
## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6, 6.9, 9…
## $ Temp <int> 67, 72, 74, 62, 56, 66, 65, 59, 61, 69, 74, 69, 66, 68, 58, 64…
## $ Month <int> 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,…
## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,…forcatsEstamos interessados em mudar os níveis de um fator:
Podemos renomear os levels através da função fct_recode():
forcatsÉ possível mudar a ordem em que os levels são apresentados:
forcatsOutra função bastante útil para agrupar categorias é a fct_lump. Considere o seguinte vetor:
forcatsA função fct_lump() utiliza o level de menor frequência e categoriza como “Outros”
forcatsAinda, podemos definir o número de categorias e agregar as demais em “Outros”