Trucos R. Establecer la configuración local de una fecha

2 Sep

Cuando manejamos datos las fechas nos producen muchos quebraderos de cabeza, por ejemplo cuando tenemos que transformar un caracter a fecha. En mi opinión R es una de las herramientas las flexibles y rápidas para trabajar con fechas, claro que acostumbrado a SAS cualquier otra herramienta me parece perfecta. A lo que vamos, imaginemos la siguiente situación :


?as.Date
x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
z
[1] NA NA "1960-03-31" "1960-07-30"

Se trata de transformar un texto a fecha en R. El formato del texto es d mes en inglés año con 4 cifras. Para transformar a fecha tenemos la función as.Date que recibe como parámetros el objeto y el formato de la fecha, el más habitual sería %d/%m/%Y 10/09/1976. Para meses en formato nombre empleamos %b pero en este caso «1jan1960» nos produce un valor perdido sin embargo «31mar1960» si se transforma correctamente ¿Por qué motivo sucede esto?


Sys.setlocale("LC_TIME")
[1] "Spanish_Spain.1252"

Nuestra configuración de fecha es spanish, luego january no es reconocido por R, tendremos que hacer:


x <- c("1ene1960", "2ene1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
z
[1] "1960-01-01" "1960-01-02" "1960-03-31" "1960-07-30"

Ya funciona correctamente. Si deseamos modificar nuestra configuración tendremos que hacer lo siguiente:


Sys.setlocale("LC_TIME", "English")
x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
z

Ya tenemos los datos como deseábamos. Muy sencillo y fácil de recordar. Saludos.

3 respuestas a «Trucos R. Establecer la configuración local de una fecha»

  1. ¡¡Gracias!!

    Es la típica cosa trivial que sabes que se tiene que poder hacer, pero que no tienes ni la más remota idea de como se hace y menos aun de como buscarlo/preguntarlo en internet.
    ¿Donde se aprenden estas cosas realmente útiles?

    jaume

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *