Extrae mes y año de un objeto zoo :: yearmon

Tengo un objeto yearmon :

 require(zoo) date1 <- as.yearmon("Mar 2012", "%b %Y") class(date1) # [1] "yearmon" 

¿Cómo puedo extraer el mes y el año de esto?

 month1 <- fn(date1) year1 <- fn(date1) 

¿Qué función debo usar en lugar de fn()

Use el método format() para los objetos de la clase "yearmon" . Aquí está su fecha de ejemplo (¡creada correctamente!)

 date1 <- as.yearmon("Mar 2012", "%b %Y") 

Entonces podemos extraer las partes de la fecha según sea necesario:

 > format(date1, "%b") ## Month, char, abbreviated [1] "Mar" > format(date1, "%Y") ## Year with century [1] "2012" > format(date1, "%m") ## numeric month [1] "03" 

Estos se devuelven como personajes. Cuando corresponda, envuelva en as.numeric() si desea el año o el mes numérico como una variable numérica, por ej.

 > as.numeric(format(date1, "%m")) [1] 3 > as.numeric(format(date1, "%Y")) [1] 2012 

Vea ?yearmon and ?strftime para más detalles; este último explica los caracteres de marcador de posición que puede usar.

El paquete lubridate es increíble para este tipo de cosas:

 > require(lubridate) > month(date1) [1] 3 > year(date1) [1] 2012 

Sé que OP está utilizando el zoo aquí, pero encontré este hilo de búsqueda de una solución ts estándar para el mismo problema. Así que pensé en agregar una respuesta libre de zoo para ts también.

 # create an example Date date_1 <- as.Date("1990-01-01") # extract year as.numeric(format(date_1, "%Y")) # extract month as.numeric(format(date_1, "%m")) 

Puedes usar format :

 library(zoo) x <- as.yearmon(Sys.time()) format(x,"%b") [1] "Mar" format(x,"%Y") [1] "2012" 

Para vectores grandes:

 y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900 m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11 

La pregunta no especificaba exactamente qué resultado se esperaba, pero suponiendo que para el mes desea el número del mes (enero = 1) y para el año que desea el año numérico de 4 dígitos, entonces suponiendo que acabamos de ejecutar el código en la pregunta:

 cycle(date1) ## [1] 3 as.integer(date1) ## [1] 2012