De hecho, como se mencionó anteriormente (y en otras partes de SO), para convertir la cadena en una fecha, necesita una fecha específica del mes. Desde la as.Date()
página del manual:
Si la cadena de fecha no especifica la fecha completamente, la respuesta devuelta puede ser específica del sistema. El comportamiento más común es asumir que un año, mes o día faltante es el actual. Si especifica una fecha incorrectamente, las implementaciones confiables darán un error y la fecha se informa como NA. Desafortunadamente, algunas implementaciones comunes (como glibc
) no son confiables y adivinan el significado deseado.
Una solución simple sería pegar la fecha "01"
en cada fecha y usarla strptime()
para indicarla como el primer día de ese mes.
Para aquellos que buscan un poco más de información sobre el procesamiento de fechas y horas en R:
En R, los tiempos usan POSIXct
y las POSIXlt
clases y las fechas usan la Date
clase.
Las fechas se almacenan como el número de días desde el 1 de enero de 1970 y las horas se almacenan como el número de segundos desde el 1 de enero de 1970.
Así por ejemplo:
d <- as.Date("1971-01-01")
unclass(d)
pct <- Sys.time()
unclass(pct)
plt <- as.POSIXlt(pct)
up <- unclass(plt)
names(up)
up$hour
Para realizar operaciones en fechas y horas:
plt - as.POSIXlt(d)
Y para procesar fechas, puede usar strptime()
(tomando prestados estos ejemplos de la página del manual):
strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
strptime(dates, "%d%b%Y")
as.Date(month, format='%Y-%m-01')
y lograr el mismo resultado. Esto me "parece" preferible, ya que especificar la misma fecha en cada mes tiene más que ver con el formato de la fecha que con la manipulación de cadenas, pero tal vez eso sea una tontería.> as.Date("2016-01", format="%Y-%m-01") # [1] NA
. Estoy usando R 3.3.1