Lubridate: manipulando fechas en R

El paquete lubridate nos facilita el tratamiento de fechas en R, útil entre otras cosas para preparar nuestros datos antes de un estudio de forecasting.

Uno de los puntos fuertes de lubridate reside en formar parte de la colección de librerías tidyverse, una de las más usadas en el ámbito del Data Science. Se caracteriza por el uso de un lenguaje diseñado para humanos, integrando objetos fecha y fecha-hora y generalizando la sintaxis empleada en el resto de paquetes tidyverse (dplyr, ggplot2…).

Antes de entrar en detalle, hagamos un breve repaso de los objetos fecha en R.

  • El formato estándar de fecha (ISO 8601) se corresponde con YYYY-MM-DD, así como el de hora HH:MM:SS.
  • Encontramos dos tipos de objeto:
    • POSIXlt – lista con componentes (year, month, day…)
    • POSIXct – segundos desde 1970-01-01 00:00:00
  • Se pueden someter a operaciones aritméticas (recordemos la función Sys.Date() de R base, que devuelve la fecha actual).

Intro objetos fecha

 

 

 

 

Para usar lubridate hemos de instalarla previamente. En caso de ya tenerla, la cargaremos con la función library().

Instalando lubridate

 

 

A continuación expondremos algunas de sus funcionalidades más útiles.

Importando y manipulando fechas.

Devuelve un objeto fecha con la fecha actual y un objeto fecha-tiempo POSIXct con la hora actual, respectivamente.

now() y today()

 

 

Transforma una fecha (año-mes-día) almacenada en un vector numérico o cadena en un objeto fecha (si argumento tz=NULL) o POSIXct (si hemos pasado la zona horaria en el argumento tz).

Función ymd

 

 

 

 

Encontramos las siguientes funciones análogas, en las que cambia el orden de los elementos fecha que pasamos como argumento principal: ydm(), mdy(), myd(), dmy(), dym(). Ej: en dym() pasamos una fecha con formato día-año-mes.

Podemos crear un objeto fecha-tiempo para cada una de estas funciones, añadiendo el sufijo _h (hora), _hm (hora:minuto), _hms (hora:minuto:segundo).

Convierte un vector de entrada en un objeto POSIXct, especificando sus formatos en el argumento order, sin necesidad de incluir separadores ni el prefijo %.

Función parse_date_time

 

Convierte en objeto fecha en formato estándar (según ISO) , junto a su análogo make_datetime(), que hace lo propio con objetos fecha-tiempo. Pasaremos valores válidos para cada uno de los argumentos: year, month, day, hour, min, sec, tz.

Función make_date

Extrayendo elementos de una fecha.

Dado un objeto fecha (fecha-tiempo) podemos extraer cada uno de sus elementos con las funciones year(), month(), day()hour(), min(), second(), wday(), yday(), tz().

Extrayendo elementos fecha

Asignando elementos a una fecha.

De la misma manera, estas funciones servirán para modificar elementos dentro de un objeto fecha (fecha-tiempo).

Asignando elementos a una fecha

Redondeando fechas.

La ventaja de redondear una fecha frente a extraer sus elementos es que mantiene el contexto de la unidad. Ej: al extraer la hora de un objeto fecha-tiempo perderemos el día en que ocurrió, sin embargo, si redondeamos a la hora más cercana, se mantiene la fecha y la hora.

round_date() – redondea a la unidad o múltiplo de unidad más cercana

ceiling_date() – redondea por exceso en la unidad especificada

floor_date() – redondea por defecto en la unidad especificada

El argumento unit admite cualquiera de las siguientes unidades: “second”, “minute”, “hour”, “day”, “week”, “month”, “bimonth”, “quarter”, “halfyear”, or “year”.

También podemos emplear múltiplos: “2 years”, “5 minutes”.

Redondeando fechas

Periodo y duración.

Podemos fijar periodos en base a:

  • unidad de tiempo > years(), months(), weeks(), days(), hours(), minutes(), seconds()
  • duración (segundos transcurridos) > dyears(), dweeks(), ddays(), dhours(), dminutes(), dseconds()

Pasamos como argumento el número de unidades en que queremos fijar nuestro periodo (default=1).

Periodo

 

 

A partir de aquí podremos realizar operaciones:

Operando con periodos

Intervalo.

Tenemos dos maneras de construir intervalos, dada una fecha de origen y otra de fin:

  • concatenando con %–%
  • interval()

Interval_1

 

 

 

Podemos realizar operaciones sobre un intervalo, tales como extraer la fecha origen, la fecha final, la longitud del intervalo (en segundos), convertirlo en un periodo o en duración:

Intervals_2

 

 

 

 

 

 

También podemos comparar intervalos, con el fin de saber si uno está contenido en otro o si se solapan:

Intervals_3

Zona horaria.

Podemos fijar zonas horarias al crear un objeto fecha-tiempo, pasándolas en el argumento tz (según clasificación de Arthur Olson). Con la función tz() extraemos la zona horaria de un objeto fecha-tiempo:

Zona horaria_0

 

 

Consultamos las zonas horarias disponibles con la función OlsonNames():

Zona horaria_1

 

 

force_tz() cambia la zona horaria sin cambiar la hora y with_tz() nos da el mismo instante en otra zona horaria:

zona horaria_3

 Formateando fechas y horas.

La función stamp() nos permite crear patrones de fecha de una manera ‘human-friendly’. Si no pasamos el formato en el argumento orders, escogerá uno de los coincidentes con la cadena pasada como argumento principal.

Formato

 

 

 

Hasta aquí nuestro resumen de las principales funciones de lubridate.

Autor:

Cooking data at Metriplica.

Leave Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.