O pacote Lubridate permite lidar com manipulação de datas em diferentes formatos, horas, fusos horários, entre outros aspectos que dificultam o processo de lidar com datas. Com esse pacote é possível:
- Realizar operações com datas;
- Fazer as mais diversas transformações em datas e horários;
- Extrair dados de interesse de datas e horários.
1 - A Classe das Datas
As datas são tradas como uma categoria especial dentro do R. Para
colocar corretamente um objeto na classe Date é usado
as.Date()
Exemplo:
natal21 <- "2021/12/25"
class(natal21)## [1] "character"
natal21 <- as.Date(natal21)
natal21## [1] "2021-12-25"
class(natal21)## [1] "Date"
Uma maneira de saber a hora exata no momento de execução de um código
é através do comando date():
date()## [1] "Wed May 18 16:39:45 2022"
Para lidar com fusos horários o pacote oferece duas funções:
with_tz() e force_tz().
Exemplo de como alterar o fuso horário de uma data:
hoje <- today()
with_tz(hoje, tzone = "Europe/Istanbul")## [1] "2022-05-18 03:00:00 +03"
De forma geral as funções são bem intuitivas por exemplo para como
uma data se comporta é usado comandos como
dmy(),ymd(), myd() entre outras,
que diz em que posição o dia, mês e o ano se encontram. Vamos supor que
queira transformar o objeto data = 20210531 em uma data,
observe-se que é formado pelo ano, mês e dia respectivamente, então
data = 20210531
data = ymd(data)
data## [1] "2021-05-31"
Dessa forma o objeto ficou em formato correto da data.
Muitas vezes é preciso extrair infomações das datas, por exemplo como o mês ou ano, na tabela a seguir é apresentado uma série de funções para extrações
| Função | Descrição |
|---|---|
| second() | extrai os segundos |
| minute() | extrai os minutos |
| hour() | extrai a hora |
| wday() | extrai o dia da semana |
| mday() | extrai o dia do mês |
| month() | extrai o mês |
| year() | extrai o ano |
Fonte: curso-r
Exemplo
mday(data) #extraindo o dia## [1] 31
month(data, label = T) #extraindo o mês## [1] mai
## 12 Levels: jan < fev < mar < abr < mai < jun < jul < ago < set < ... < dez
2 - Operações com Datas
O pacote Lubridate também possui funções que nos permitem realizar operações aritméticas e calcular intervalos com datas.
Os intevalos podem ser calculados e salvos usando a função
interval(), que são salvos em objetos com classe
“Interval”.
Exemplo:
comeco = dmy("18/11/1996")
fim = dmy("01/02/1997")
intervalo <- interval(comeco, fim)
intervalo## [1] 1996-11-18 UTC--1997-02-01 UTC
class(intervalo)## [1] "Interval"
## attr(,"package")
## [1] "lubridate"
Além disso, podemos também criar intervalos usando o operador
%--%, outra funcionalidade dos intervalos, é a
possibilidade de se verificar uma intersecção entre dois intervalos
usando a função int_overlaps().
Exemplo:
intervalo_1 = dmy("12/05/2000") %--% dmy("02/06/2005")
intervalo_2 = dmy("04/08/2004") %--% dmy("08/06/2006")
int_overlaps(intervalo_1,intervalo_2)## [1] TRUE
Uma outra função do pacote Lubridate é a de possibilitar operações aritméticas com as datas, abaixo mostramos algumas dessas operações.
Somando Datas:
data <- dmy("18/08/2021")
data + ddays(1)## [1] "2021-08-19"
data + dyears(1)## [1] "2022-08-18 06:00:00 UTC"
# Note que, a data ficou 17/09/2021, isso ocorre devido ao mês de Agosto ter 31 dias.
data + dmonths(1)## [1] "2021-09-17 10:30:00 UTC"
Criando datas Recorrentes:
projeto <- dmy("19/08/2021")
reunioes_projeto <- projeto + weeks(0:3)
reunioes_projeto## [1] "2021-08-19" "2021-08-26" "2021-09-02" "2021-09-09"
Duração de um intervalo:
intervalo = dmy("12/05/2021") %--% dmy("02/06/2021")
intervalo / ddays(1) # Número de dias## [1] 21
intervalo / dhours(1) # Número de horas## [1] 504
intervalo / dminutes(1) # Número de minutos## [1] 30240
as.period(intervalo)## [1] "21d 0H 0M 0S"