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"