Obtenha a data atual em qualquer linguagem de programação, uma operação equivalente a "Hello world!" O idioma R não é exceção.
Neste artigo, entenderemos como o trabalho com datas Ă© organizado na sintaxe bĂĄsica da linguagem R e tambĂ©m consideraremos vĂĄrios pacotes Ășteis que expandem seus recursos ao trabalhar com datas:
lubridate
- um pacote que permite cålculos aritméticos entre datas;timeperiodsR
- um pacote para trabalhar com intervalos de tempo e seus componentes.

ConteĂșdo
- Trabalhando com datas na sintaxe R bĂĄsica
1.1 Converter texto em data
1.2 Recuperando componentes de data na base R - Trabalhando com datas com o pacote de lubrificado
2.1 Converter texto em data usando lubrificado
2.2 Recuperando componentes de data usando pacote de lubrificado
2.3 OperaçÔes aritmĂ©ticas com datas - Trabalho simplificado com perĂodos, perĂodo de tempoR pacote
3.1 Intervalos de tempo em perĂodos de tempoR
3.2 Filtrando um vetor de data com timeperiodsR - ConclusĂŁo
Trabalhando com datas na sintaxe R bĂĄsica
Converter texto em data
No R båsico, hå um conjunto de funçÔes para trabalhar com datas. O ponto negativo da sintaxe båsica é que o registro de nomes e argumentos de funçÔes é muito fragmentado e praticamente não possui conexão lógica. No entanto, as funçÔes båsicas da linguagem devem ser conhecidas, portanto, começaremos com elas.
Na maioria das vezes, ao carregar dados no R, de arquivos csv ou outras fontes, vocĂȘ obtĂ©m a data na forma de texto. Para as.Date()
esse texto no tipo de dados correto, use a função as.Date()
.
# my_dates <- c("2019-09-01", "2019-09-10", "2019-09-23") # class(my_dates)
#> [1] "character"
# my_dates <- as.Date(my_dates) # class(my_dates)
#> [1] "Date"
Por padrĂŁo, as.Date()
aceita uma data em dois formatos: AAAA-MM-DD ou AAAA / MM / DD .
Se as datas no seu conjunto de dados estiverem em qualquer outro formato, vocĂȘ poderĂĄ usar o argumento de format
para conversĂŁo.
as.Date("September 26, 2019", format = "%B %d, %Y")
O formato aceita operadores em forma de cadeia, indicando qualquer intervalo de tempo e seu formato, os valores mais frequentemente usados ââsĂŁo mostrados na tabela abaixo:
Assim, "26 de setembro de 2019" Ă© o nome completo do mĂȘs, dia e ano. VocĂȘ pode descrever esse formato de data com os operadores da seguinte maneira: "%B %d, %Y"
.
Onde:
%B
- nome completo do mĂȘs%d
- nĂșmero do dia no mĂȘs%Y
- Designação do ano com quatro dĂgitos
Ao descrever o formato da data, Ă© importante incluir todos os caracteres adicionais da sua sequĂȘncia, como traços, vĂrgulas, pontos, espaços e assim por diante. No meu exemplo, "26 de setembro de 2019", uma vĂrgula Ă© colocada apĂłs a data e tambĂ©m deve ser colocada na descrição do formato: "%B %d, %Y"
.
HĂĄ situaçÔes em que vocĂȘ obtĂ©m uma data que nĂŁo Ă© apenas inadequada para os formatos padrĂŁo (AAAA-MM-DD ou AAAA / MM / DD) , mas tambĂ©m em um idioma que difere da configuração padrĂŁo no seu sistema operacional. Por exemplo, vocĂȘ baixou dados em que a data Ă© indicada no seguinte formulĂĄrio: "15 de dezembro de 2019". Antes de converter essa sequĂȘncia em uma data, vocĂȘ precisa alterar o cĂłdigo do idioma.
# Sys.setlocale("LC_TIME", "Russian") # as.Date(" 15, 2019 .", format = "%B %d, %Y")
Recuperando componentes de data na base R
Não hå muitas funçÔes no R båsico que permitem extrair qualquer parte de uma data de um objeto da classe Date .
current_date <- Sys.Date() # weekdays(current_date) # months(current_date) # quarters(current_date) #
Além da classe principal de objetos Date na base R, existem mais 2 tipos de dados que armazenam o registro de data e hora: POSIXlt , POSIXct . A principal diferença entre essas classes e Data é que elas armazenam hora além da data.
# current_time <- Sys.time() # current_time class(current_time)
# "POSIXct" "POSIXt"
A função Sys.time()
retorna a data e hora atuais no formato POSIXct . Esse formato tem significado semelhante ao UNIXTIME e armazena o nĂșmero de segundos desde o inĂcio da era UNIX (meia-noite (UTC) de 31 de dezembro de 1969 a 1 de janeiro de 1970) .
A classe POSIXlt também armazena a hora e a data e todos os seus componentes. Portanto, é um objeto com uma estrutura mais complexa, mas a partir da qual é fåcil obter qualquer componente da data e hora desde essencialmente POSIXlt é uma lista .
# current_time_ct <- Sys.time() # POSIXlt current_time_lt <- as.POSIXlt(current_time_ct) # current_time_lt$sec # current_time_lt$min # current_time_lt$hour # current_time_lt$mday # current_time_lt$mon # current_time_lt$year # current_time_lt$wday # current_time_lt$yday # current_time_lt$zone #
A conversão de dados numéricos e de texto em formatos POSIX * é realizada pelas funçÔes as.POSIXct()
e as.POSIXlt()
. Essas funçÔes tĂȘm um pequeno conjunto de argumentos.
- x - O nĂșmero, sequĂȘncia ou objeto da classe Date a ser convertida;
- tz - Fuso horĂĄrio, o padrĂŁo Ă© "GMT";
- formato - Descrição do formato da data em que os dados passados ââno argumento x sĂŁo apresentados;
- origem - Usado apenas ao converter um nĂșmero para POSIX, vocĂȘ precisa passar um objeto de data para esse argumento e a hora em que os segundos sĂŁo contados. Normalmente usado para tradução de UNIXTIME.
Se seus dados de data e hora forem apresentados em UNIXTIME , use o exemplo a seguir para convertĂȘ-los em uma data compreensĂvel e legĂvel:
# UNIXTIME as.POSIXlt(1570084639, origin = "1970-01-01")
Na origem, vocĂȘ pode especificar qualquer registro de data e hora. Por exemplo, se nos seus dados a data e a hora estiverem indicados como o nĂșmero de segundos a partir de 15 de setembro de 2019 12:15, para convertĂȘ-los em uma data, use:
# UNIXTIME 15 2019 12:15 as.POSIXlt(1546123, origin = "2019-09-15 12:15:00")
Trabalhando com datas com o pacote de lubrificado
talvez o lubridate
seja o pacote mais popular para trabalhar com datas em R. Ele fornece mais trĂȘs classes adicionais.
- duraçÔes - duração, ou seja, nĂșmero de segundos entre dois carimbos de data e hora;
- perĂodos - perĂodos permitem realizar cĂĄlculos entre datas de intervalos legĂveis por humanos: dias, meses, semanas e assim por diante;
- intervalos - objetos que fornecem o ponto inicial e final no tempo.
A instalação de pacotes adicionais na linguagem R é realizada pela função padrão install.packages()
.
Instalando o pacote de lubridate
:
install.packages("lubridate")
Converter texto em data usando lubrificado
As funçÔes do pacote de lubridate
simplificam bastante o processo de conversão de texto em data e também permitem realizar operaçÔes aritméticas com datas e horas.
As funçÔes today()
e now()
ajudarĂŁo vocĂȘ a obter a data atual, ou data e hora.
today() # now() #
Para converter uma string em uma data, o lubridate
possui uma famĂlia inteira de funçÔes cujos nomes sempre consistem em trĂȘs letras e indicam uma sequĂȘncia de componentes de data:
Lista de funçÔes para converter texto em data via lubrificadoymd()
ydm()
mdy()
myd()
dmy()
dym()
yq()
Alguns exemplos para converter seqĂŒĂȘncias de caracteres em datas:
ymd("2017 jan 21") mdy("March 20th, 2019") dmy("1st april of 2018")
Como vocĂȘ pode ver, o lubridate
muito mais eficiente no reconhecimento de descriçÔes de data na forma de texto e permite converter texto em data sem usar operadores adicionais para descrever o formato.
Recuperando componentes de data usando pacote de lubrificado
Também usando lubridate
vocĂȘ pode obter qualquer componente a partir de uma data:
dt <- ymd("2017 jan 21") year(dt) # month(dt) # mday(dt) # yday(dt) # wday(dt) #
OperaçÔes aritméticas com datas
Porém, a funcionalidade mais importante e båsica do lubridate
é a capacidade de executar vårias operaçÔes aritméticas com datas.
O arredondamento de uma data Ă© realizado por trĂȘs funçÔes:
floor_date
- arredondando para o horĂĄrio passado mais prĂłximoceiling_date
- arredondando para o futuro prĂłximoround_date
- arredondando para o horĂĄrio mais prĂłximo
Cada uma dessas funçÔes possui um argumento de unidade , que permite especificar uma unidade de arredondamento: segundo, minuto, hora, dia, semana, mĂȘs, bimestre, trimestre, estação, semestral, ano
dt <- ymd("2017 jan 21") round_date(dt, unit = "month") # round_date(dt, unit = "3 month") # 3 round_date(dt, unit = "quarter") # round_date(dt, unit = "season") # round_date(dt, unit = "halfyear") #
Então, vamos descobrir como obter uma data que serå 8 dias após a data atual e realizar vårios outros cålculos aritméticos entre duas datas.
today() + days(8) # 8 today() - months(2) # 2 today() + weeks(12) # 12 today() - years(2) # 2
Trabalho simplificado com perĂodos, pacote timeperiodsR.
timeperiodsR
Ă© um novo pacote para trabalhar com datas publicadas no CRAN em setembro de 2019.
Instalando o pacote timeperiodsR
:
install.packages("timeperiodsR")
O objetivo principal Ă© determinar rapidamente um determinado intervalo de tempo em relação a uma determinada data. Por exemplo, usando suas funçÔes, vocĂȘ pode facilmente:
- Receba semana passada, mĂȘs, trimestre ou ano em R.
- Obtenha um determinado nĂșmero de intervalos de tempo em relação a uma data, como as Ășltimas 4 semanas.
- Ă fĂĄcil extrair seus componentes do intervalo de tempo obtido: as datas de inĂcio e tĂ©rmino, o nĂșmero de dias que se enquadram no intervalo, toda a sequĂȘncia de datas que o inserem.
O nome de todas as funçÔes do pacote timeperiodsR
intuitivo e consiste em duas partes: direction _ interval , em que:
- direção na qual é necessårio mover em relação a uma determinada data: last_n, previous, this, next, next_n.
- intervalo de tempo para calcular o perĂodo: dia, semana, mĂȘs, trimestre, ano.
Conjunto completo de recursos:last_n_days()
last_n_weeks()
last_n_months()
last_n_quarters()
last_n_years()
previous_week()
previous_month()
previous_quarter()
previous_year()
this_week()
this_month()
this_quarter()
this_year()
next_week()
next_month()
next_quarter()
next_year()
next_n_days()
next_n_weeks()
next_n_months()
next_n_quarters()
next_n_years()
custom_period()
Intervalos de tempo em perĂodos de tempoR
Essas funçÔes sĂŁo Ășteis quando vocĂȘ precisa criar relatĂłrios com base nos dados da Ășltima semana ou mĂȘs. Para obter o Ășltimo mĂȘs, use a função com o mesmo nome previous_month()
:
prmonth <- previous_month()
ApĂłs o qual vocĂȘ terĂĄ um objeto prprth da classe tpr , do qual vocĂȘ poderĂĄ obter facilmente os seguintes componentes:
- a data de inĂcio do perĂodo, em nosso exemplo, este Ă© o Ășltimo mĂȘs
- data de tĂ©rmino do perĂodo
- o nĂșmero de dias incluĂdos no perĂodo
- sequĂȘncia de datas incluĂdas no perĂodo
AlĂ©m disso, vocĂȘ pode obter cada um dos componentes de maneiras diferentes:
# prmonth$start start(prmonth) # prmonth$end end(prmonth) # prmonth$sequence seq(prmonth) # prmonth$length length(prmonth)
VocĂȘ tambĂ©m pode obter qualquer um dos componentes usando o argumento part , presente em cada uma das funçÔes do pacote. Valores possĂveis: inĂcio, fim, sequĂȘncia, comprimento.
previous_month(part = "start") # previous_month(part = "end") # previous_month(part = "sequence") # previous_month(part = "length") #
EntĂŁo, vejamos todos os argumentos disponĂveis nas funçÔes do pacote timeperiodsR
:
x
- a data de referĂȘncia a partir da qual o perĂodo serĂĄ calculado; por padrĂŁo, a data atual;n
- O nĂșmero de intervalos que serĂŁo incluĂdos no perĂodo, por exemplo, 3 semanas anteriores;part
- Qual componente do objeto tpr
vocĂȘ precisa obter, por padrĂŁo, all
;week_start
- O argumento estĂĄ presente apenas nas funçÔes para trabalhar com semanas e permite especificar o nĂșmero do dia da semana que serĂĄ considerado seu inĂcio; por padrĂŁo, o inĂcio da semana Ă© segunda-feira, mas vocĂȘ pode especificar de 1 - segunda a 7 - domingo.
Assim, vocĂȘ pode calcular qualquer perĂodo de tempo relativo Ă data atual ou qualquer outra data, darei mais alguns exemplos:
# 3 # 6 2019 # - last_n_weeks(x = "2019-10-06", n = 3, week_start = 1)
Time period: from 9 September of 2019, Monday to 29 September of 2019, Sunday
6 de outubro Ă© domingo:

Precisamos de um perĂodo que, em relação a 6 de outubro, leve trĂȘs semanas anteriores. NĂŁo incluindo a semana de 6 de outubro. Portanto, este Ă© o perĂodo de 9 a 29 de setembro.

# 4 # 16 2019 previous_month(x = "2019-09-16", n = 4)
Time period: from 1 May of 2019, Wednesday to 31 May of 2019, Friday
Neste exemplo, estamos interessados ââno mĂȘs que foi hĂĄ 4 meses, se prosseguirmos em 16 de setembro de 2019, portanto, era em maio de 2019.
Filtrando um vetor de data com timeperiodsR
Existem vĂĄrios operadores para filtrar datas nos timeperiodsR
:
- % left_out% - compara dois objetos da classe tpr e retorna o valor da esquerda, que nĂŁo estĂĄ Ă direita.
- % left_in% - compara dois objetos da classe tpr e retorna datas do objeto esquerdo que estĂŁo incluĂdas no direito.
- % right_out% - compara dois objetos da classe tpr e retorna o valor da direita, que estĂĄ ausente na esquerda.
- % right_in% - compara dois objetos da classe tpr e retorna as datas do objeto direito que estĂŁo presentes no esquerdo.
period1 <- this_month("2019-11-07") period2 <- previous_week("2019-11-07") period1 %left_in% period2 # period1 period2 period1 %left_out% period2 # period1 period2 period1 %right_in% period2 # period2 period1 period1 %right_out% period2 # period2 period1
ConclusĂŁo
Examinamos detalhadamente as classes de objetos projetados na linguagem R para trabalhar com datas. Agora tambĂ©m Ă© possĂvel executar operaçÔes aritmĂ©ticas em datas e obter rapidamente perĂodos de tempo usando o pacote timeperiodsR
.
Se vocĂȘ estĂĄ interessado na linguagem R, convido vocĂȘ a assinar o meu canal de telegrama R4marketing , no qual diariamente compartilho materiais Ășteis sobre o uso da linguagem R na resolução de minhas tarefas diĂĄrias.