Estrai mese e anno da uno zoo: object yearmon

Ho un object yearmon :

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

Come posso estrarre il mese e l’anno da questo?

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

Quale funzione dovrei usare al posto di fn()

Usa il metodo format() per oggetti di class "yearmon" . Ecco la tua data di esempio (creata correttamente!)

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

Quindi possiamo estrarre le parti di data come richiesto:

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

Questi vengono restituiti come caratteri. Ove appropriato, avvolgere in as.numeric() se si desidera che l'anno o il mese numerico sia una variabile numerica, ad es

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

Vedi ?yearmon e ?yearmon per i dettagli - quest'ultimo spiega i caratteri segnaposto che puoi usare.

Il pacchetto lubridate è sorprendente per questo tipo di cose:

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

So che l’OP sta usando lo zoo qui, ma ho trovato questo thread googling per una soluzione ts standard per lo stesso problema. Quindi ho pensato di aggiungere anche una risposta senza zoo per ts .

 # 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")) 

Puoi usare il format :

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

Per i vettori di grandi dimensioni:

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

La domanda non ha indicato precisamente quale output è previsto, ma partendo dal presupposto che per il mese si desidera il numero del mese (gennaio = 1) e per l’anno si desidera l’anno numerico a 4 cifre, assumendo che abbiamo appena eseguito il codice nella domanda:

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