Cuando vamos a realizar algún tipo de código en R para el que necesitemos utilizar fechas, debemos tener presente el formato en el que R almacena las fechas, ya que nos será de utilidad a la hora de trabajar con ellas.

El estándar utilizado por R para las fechas es yyyy-mm-dd, es decir, año-mes-día. Para introducir una fecha en R, debemos utilizar siempre el comando «as.Date«. Si no lo utilizamos, el programa leerá nuestra fecha como una variable «character«, y lógicamente no podremos utilizarla como fecha.

Vamos a verlo con un ejemplo:

   navidad2019 <- ("2019-12-25")
navidad2019
[1] "2019-12-25"
class(navidad2019)
[1] "character"

Sin embargo, si utilizamos el comando as.Date en el momento de almacenar la fecha:

   navidad2019=as.Date("2019-12-25")
navidad2019
[1] "2019-12-25"
class(navidad2019)
[1] "Date"

Ahora sí hemos conseguido definir como fecha el 25 de diciembre de 2019 en R.

Otro comando predefinido que nos puede ser muy útil cuando estemos escribiendo algún código que utilice fechas, es la «captura» de la fecha almacenada en el sistema (en tu PC).

   Sys.Date()
[1] "2019-03-14" # Hoy es 14 de marzo de 2019

Jugando con distintos formatos de fecha en R

Como os he comentado antes, R siempre almacena las fechas en el mismo formato, sin embargo, es capaz de leer muchos más formatos de fechas:

 
# Símbolo # Significado
%d día (numérico, de 0 a 31)
%a día de la semana abreviado a tres letras
%A día de la semana (nombre completo)
%m mes (numérico de 0 a 12)
%b mes (nombre abreviado a tres letras)
%B mes (nombre completo)
%y año (con dos dígitos)
%Y año (con cuatro dígitos)

Cuando queramos introducir en R una fecha con un formato distinto al predeterminado, volveremos a usar el comando as.Date pero acompañado del formato deseado (haciendo uso de la tabla anterior).

 navidad2020=as.Date("25/12/2020",format="%d/%m/%Y")
navidad2020
[1] "2020-12-25"

navidad2021=as.Date("25 Diciembre 2021",format="%d %B %Y")
navidad2021
[1] "2021-12-25"

# Como podemos ver, hemos introducido fechas con formatos distintos, y R ha sido capaz de leerlas y guardarlas correctamente (por supuesto, en su formato predeterminado).

# Sin embargo, si el formato y la fecha introducida no coinciden, R no será capaz de guardar la variable y nos devolverá una variable vacía:

navidad2021=as.Date("25-dic-2021",format="%d-%m-%Y")
navidad2021
[1] NA

Del mismo modo que estamos introduciendo fechas en otro formato, pero R nos las sigue mostrando en su formato predeterminado, también podemos hacer que nos las muestre en pantalla con el formato que nosotros queramos. Para ello, podremos utilizar cualquiera de las combinaciones indicadas en el cuadro de arriba:

   navidad2019 
[1] "2019-12-25"
navidad2019 <- format(navidad2019,"%d %B %Y")
navidad2019
[1] "25 diciembre 2019"

# ¡PERO ATENCIÓN! Ya no estaríamos almacenando una fecha:

class(navidad2019)
[1] "character"

También tenemos la opción de trabajar con vectores de fechas, de este modo podremos tratar rápidamente la información de un conjunto de fechas:

   dias=c("1/10/2005","2/2/2006","3/4/2006","8/11/2014")
dias
[1] "1/10/2005" "2/2/2006" "3/4/2006" "8/11/2014"
class(dias) # Vemos que este vector todavía no es una fecha:
[1] "character"


## Recordemos que para definir una fecha debemos utilizar la fórmula as.Date, y definir el formato utilizado:

dias2 = as.Date(dias,format="%d/%m/%Y")
dias2
[1] "2005-10-01" "2006-02-02" "2006-04-03" "2014-11-08"
class(dias2)
[1] "Date"

Operaciones con fechas en R

Siempre que almacenemos un valor como fecha en R, accederemos a una serie de fórmulas predefinidas para realizar operaciones con fechas.

## Podemos contar el número de días entre dos fechas:

ene01 = as.Date("2019-01-01")
ene30 = as.Date("2019-01-30")
ene30-ene01
[1] Time difference of 29 days

# Nota: solo podremos realizar estos cálculos cuando las fechas estén almacenadas correctamente en R, en caso contrario, nos devolverá un error:

navidad2021
[1] "2021-12-25"
navidad2019
[1] "25 diciembre 2019"
navidad2021-navidad2019 # navidad2019 ya no es tipo fecha
Error in unclass(as.Date(e1)) - e2 :
non-numeric argument to binary operator



## La función difftime nos permite obtener estas diferencias entre fechas en semanas, horas, minutos o segundos.

# Diferencia en semanas (weeks)
difftime(ene30, ene01, units = "weeks")
[1] Time difference of 4.142857 weeks

# Diferencia en horas (hours)
difftime(ene30, ene01, units = "hours")
[1] Time difference of 696 hours

# Diferencia en minutos (mins)
difftime(ene30, ene01, units = "mins")
[1] Time difference of 41760 mins

# Diferencia en segundos (secs)
difftime(ene30, ene01, units = "secs")
[1] Time difference of 2505600 secs


## Otras operaciones con fechas en R:

navidad2020 + 6 # Sumar días a una fecha
[1] "2020-12-31"

navidad2020 - 24 # Restar días a una fecha
[1] "2020-12-01"