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"