Cuando manejamos datos, las fechas nos producen muchos quebraderos de cabeza; por ejemplo, cuando tenemos que transformar un carácter a fecha. En mi opinión, R es una de las herramientas más 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ía, mes en inglés y año con cuatro 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 para 10/09/1976). Para meses en formato nombre empleamos %b, pero en este caso "1jan1960" nos produce un valor perdido; sin embargo, "31mar1960" sí se transforma correctamente. ¿Por qué motivo sucede esto?

Sys.getlocale("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
# [1] "1960-01-01" "1960-01-02" "1960-03-31" "1960-07-30"

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