¿Convertir año y mes (formato "aaaa-mm") a una fecha?

Resuelto R_User asked hace 54 años • 9 respuestas

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?

R_User avatar Jan 01 '70 08:01 R_User
Aceptado

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=""))
Sacha Epskamp avatar Jun 05 '2011 12:06 Sacha Epskamp

Prueba esto. (Aquí utilizamos text=Linespara 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 zcreada 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:

  1. "yearmon"Los objetos de clase se ordenan en orden de calendario.

  2. 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 za "Date"clase: time(z) <- as.Date(time(z)).

G. Grothendieck avatar Jun 05 '2011 12:06 G. Grothendieck