Tenemos un conjunto de datos que representa un vector con veinte valores. Estos valores contienen una fecha y una hora. Sin embargo, cuando los tenemos en R no tienen el formato de fecha y ahora. Sin embargo, convertir un vector de texto a formato de fecha y hora en R puede realizarse rápidamente con el paquete lubridate
.
Quiero leer...
Convertir un vector de texto a formato de fecha y hora en R
Para ver cómo podemos convertir un vector de texto a formato de fecha y hora en R, vamos a comenzar con un ejemplo. Este ejemplo es un vector con 20 valores, que hemos llamado datos
.
datos <- c("2019-12-31T06:40:13Z", "2019-12-31T06:43:00Z", "2019-12-31T07:11:30Z", "2019-12-31T07:18:30Z", "2019-12-31T10:39:47Z", "2019-12-31T10:47:12Z", "2019-12-31T10:53:27Z", "2019-12-31T10:59:03Z", "2019-12-31T11:20:46Z", "2019-12-31T11:22:19Z", "2019-12-31T11:25:30Z", "2019-12-31T11:31:56Z", "2019-12-31T11:36:59Z", "2019-12-31T11:37:03Z", "2019-12-31T11:37:38Z", "2019-12-31T11:39:20Z", "2019-12-31T11:49:52Z", "2019-12-31T11:55:30Z", "2019-12-31T12:00:49Z", "2019-12-31T12:04:37Z")
Como vemos, cada elemento del vector está compuesto por la fecha seguida de la hora. La fecha está en año-mes-día, y la hora en horas-minutos-segundos. Sin embargo, estos datos tienen esta estructura de cadena de caracteres, no de fecha y hora. Y esto lo podemos averiguar ejecutando str()
y class()
. Estas dos funciones nos confirman que datos
es una cadena de caracteres ("character"
), por lo que no tienen un formato temporal.
str(datos)
## chr [1:20] "2019-12-31T06:40:13Z" "2019-12-31T06:43:00Z" ...
class(datos)
## [1] "character"
Lo que tenemos que hacer, de cara a que se manejen en R con el formato adecuado al cuál responden, es convertirlos a formato de fecha y hora. Y esto lo podemos realizar con el paquete lubridate
.
Paquete lubridate para trabajar con fechas y horas
Quizás lubridate
es uno de los paquetes más importantes que hay en R para trabajar con datos temporales, por lo que lo primero que tenemos que hacer es cargarlo en nuestro entorno de trabajo.
library(lubridate)
Entre las muchas funciones que presenta este paquete está la función ymd_hms()
.
Dentro de esta función se incluye el nombre del vector que teníamos anteriormente, cuyo nombre además ya nos da una pista de qué valores recibe. Primero la fecha (ymd
, year-month-day) y hora (hms
, hour-minute-second).
Vamos a llamar al nuevo vector como datos_convertidos
.
datos_convertidos <- ymd_hms(datos) print(datos_convertidos)
## [1] "2019-12-31 06:40:13 UTC" "2019-12-31 06:43:00 UTC" ## [3] "2019-12-31 07:11:30 UTC" "2019-12-31 07:18:30 UTC" ## [5] "2019-12-31 10:39:47 UTC" "2019-12-31 10:47:12 UTC" ## [7] "2019-12-31 10:53:27 UTC" "2019-12-31 10:59:03 UTC" ## [9] "2019-12-31 11:20:46 UTC" "2019-12-31 11:22:19 UTC" ## [11] "2019-12-31 11:25:30 UTC" "2019-12-31 11:31:56 UTC" ## [13] "2019-12-31 11:36:59 UTC" "2019-12-31 11:37:03 UTC" ## [15] "2019-12-31 11:37:38 UTC" "2019-12-31 11:39:20 UTC" ## [17] "2019-12-31 11:49:52 UTC" "2019-12-31 11:55:30 UTC" ## [19] "2019-12-31 12:00:49 UTC" "2019-12-31 12:04:37 UTC"
Vemos que ha identificado correctamente la fecha y la hora de cada uno de los veinte elementos del vector. Esto lo confirmamos viendo la estructura y clase de este nuevo vector.
str(datos_convertidos)
## POSIXct[1:20], format: "2019-12-31 06:40:13" "2019-12-31 06:43:00" "2019-12-31 07:11:30" ...
class(datos_convertidos)
## [1] "POSIXct" "POSIXt"
Vemos que en este caso ya presenta dos formatos: POSIXct
(para las fechas) y POSIXt
(para las horas).
De este modo, convertir un vector de texto a formato de fecha y hora en R nos permite poder trabajar con los formatos específicos de cada variable. Podremos también realizar las operaciones necesarias interpretando correctamente las fechas y las horas. En la documentación oficial se ven muchas más opciones con las que trabajar.