¿Convertir año y mes (formato "aaaa-mm") a una fecha?
Tengo un conjunto de datos que se parece a este:
Month count
2009-01 12
2009-02 310
2009-03 2379
2009-04 234
2009-05 14
2009-08 1
2009-09 34
2009-10 2386
Quiero trazar los datos (meses como valores de x y recuentos como valores de y). Como hay lagunas en los datos, quiero convertir la información del mes en una fecha. Lo intenté:
as.Date("2009-03", "%Y-%m")
Pero no funcionó. ¿Qué ocurre? ¿Parece que as.Date()
también requiere un día y no es capaz de establecer un valor estándar para el día? ¿Qué función resuelve mi problema?
Dado que las fechas corresponden a un valor numérico y una fecha de inicio, efectivamente necesita el día. Si realmente necesita que sus datos estén en formato Fecha, puede simplemente fijar el día al primero de cada mes manualmente pegándolo en la fecha:
month <- "2009-03"
as.Date(paste(month, "-01", sep=""))
Prueba esto. (Aquí utilizamos text=Lines
para mantener el ejemplo independiente, pero en realidad lo reemplazaríamos con el nombre del archivo).
Lines <- "2009-01 12
2009-02 310
2009-03 2379
2009-04 234
2009-05 14
2009-08 1
2009-09 34
2009-10 2386"
library(zoo)
z <- read.zoo(text = Lines, FUN = as.yearmon)
plot(z)
El eje X no es tan bonito con estos datos, pero si tiene más datos en realidad, podría estar bien o puede usar el código para un eje X elegante que se muestra en la sección de ejemplos de ?plot.zoo
.
La serie del zoológico z
creada anteriormente tiene un "yearmon"
índice de tiempo y se ve así:
> z
Jan 2009 Feb 2009 Mar 2009 Apr 2009 May 2009 Aug 2009 Sep 2009 Oct 2009
12 310 2379 234 14 1 34 2386
"yearmon"
También se puede utilizar solo:
> as.yearmon("2000-03")
[1] "Mar 2000"
Nota:
"yearmon"
Los objetos de clase se ordenan en orden de calendario.Esto trazará los puntos mensuales a intervalos igualmente espaciados, que probablemente sea lo que se desea; sin embargo, si desea trazar los puntos en intervalos desigualmente espaciados en proporción al número de días de cada mes, convierta el índice de
z
a"Date"
clase:time(z) <- as.Date(time(z))
.