Manipulando datas com o lubridate

Datas no R são tratadas como um tipo especial de objeto, com classe Date.

Existem algumas funções para converter diversos tipos de padrões de data para a classe Date, veja como funcionam algumas delas!

Lubridate

Primeiramente, vamos carregar o pacote lubridate:

library(lubridate)

Suponha que queremos criar um objeto da classe Date com a seguinte data: 20/11/2021

A primeira coisa a ser feita, é identificar a ordem da entrada, nesse caso, é: dia, mês, ano (padrão brasileiro)

Então, basta usar a função dmy (day, month, year):

dmy("20/11/2021")
## [1] "2021-11-20"

Obs: note que o padrão do R para um objeto da classe Date é y/m/d (year, month, day)

Trocando dia e mês de lugar na data anterior, obtemos: 11/20/2021.

Para converter para a classe Date, identificamos que a ordem de entrada é: mês, dia, ano (padrão americano)

E então, usamos a função mdy (month, day, year):

mdy("11/20/2021")
## [1] "2021-11-20"

Seguindo essa intuição:

ydm("2021/20/11")
## [1] "2021-11-20"

Além disso, a função aceita diversos padrões de entrada, vejamos:

dmy(20112021)
## [1] "2021-11-20"
dmy("20112021")
## [1] "2021-11-20"
dmy("20-11-2021")
## [1] "2021-11-20"
dmy("20.11.2021")
## [1] "2021-11-20"

Incluindo horas, minutos e segundos

Suponha que queremos criar um objeto com a seguinte informação: 20/11/2021 16:34:29. Basta usar a função dmy_hms:

dmy_hms("20/11/2021 16:34:29")
## [1] "2021-11-20 16:34:29 UTC"
dmy_hms("20112021163429")
## [1] "2021-11-20 16:34:29 UTC"

Os operadores %m+% e %m-%

Podemos usar os operadores %m+% e %m-% para somar e subtrair datas.

Criando um objeto date:

data <- dmy("31-01-2022")

Por exemplo, para somar um mês em alguma data, fazemos:

data %m+% months(1)
## [1] "2022-02-28"

Note que a função não excedeu o último dia do mês, ela retornou o último dia do mês seguinte.

Podemos somar mais de um mês por vez, obtendo:

data %m+% months(1:12)
##  [1] "2022-02-28" "2022-03-31" "2022-04-30" "2022-05-31" "2022-06-30"
##  [6] "2022-07-31" "2022-08-31" "2022-09-30" "2022-10-31" "2022-11-30"
## [11] "2022-12-31" "2023-01-31"

A expressão Date %m+% months(n) sempre retorna uma data do n-ésimo mês seguinte à data do objeto Date

Subtraindo um dia:

data %m+% months(1:12) %m-% days(1)
##  [1] "2022-02-27" "2022-03-30" "2022-04-29" "2022-05-30" "2022-06-29"
##  [6] "2022-07-30" "2022-08-30" "2022-09-29" "2022-10-30" "2022-11-29"
## [11] "2022-12-30" "2023-01-30"

Outro exemplo:

data_2 <- dmy("29/02/2020")
data_2 %m+% years(1)
## [1] "2021-02-28"
data_2 %m-% years(1)
## [1] "2019-02-28"
comments powered by Disqus