Respuestas:
Usa el format()método para objetos de clase "yearmon". Aquí está su fecha de ejemplo (¡creada correctamente!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Luego, 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 caracteres. Cuando corresponda, ingrese as.numeric()si desea el año o el mes numérico como variable numérica, p. Ej.
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Consulte ?yearmony ?strftimepara obtener más detalles: este último explica los caracteres de marcador de posición que puede usar.
vectorde n elementos, digamos 1k fechas en uno vector?
date1puede ser un vector de fechas.
El paquete lubridate es asombroso para este tipo de cosas:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridatepaquete no soporta e intenté instalar este y usé año (fecha) pero da el día en lugar del año ¿Esto solo funciona en fechas cuyo formato es "2015-05 -06 "?
Sé que el OP está usando zooaquí, pero encontré este hilo buscando en Google una tssolución estándar para el mismo problema. Así que pensé en agregar una zoorespuesta gratuita para tstambié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"))
Puede utilizar format:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))el mes como numérico, por ejemplo.
Para vectores grandes:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
POSIXltobjeto útil que hace que el paquete zoológico sea innecesario
La pregunta no indicó con precisión qué resultado se esperaba, pero suponiendo que para el mes desea el número de mes (enero = 1) y para el año desea el año numérico de 4 dígitos, entonces asumiendo que acabamos de ejecutar el código en la pregunta:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012