Risposte:
Usa il format()metodo per gli oggetti di classe "yearmon". Ecco la tua data di esempio (creata correttamente!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Quindi possiamo estrarre le parti della 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. Se appropriato, as.numeric()inserire se si desidera l'anno o il mese numerico come variabile numerica, ad es
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Vedi ?yearmone ?strftimeper i dettagli: quest'ultimo spiega i caratteri segnaposto che puoi utilizzare.
vectordi n elementi, diciamo 1k date in uno vector?
date1può anche essere un vettore di date.
Il pacchetto lubridate è fantastico per questo genere di cose:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridatepacchetto e ho provato a installare questo e ha usato l'anno (data) ma fornisce il giorno invece dell'anno funziona solo con date il cui formato è "2015-05 -06 "?
So che l'OP sta usando zooqui, ma ho trovato questo thread che cerca su Google una tssoluzione standard per lo stesso problema. Quindi ho pensato di aggiungere anche una zoorisposta gratuita 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 format:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))il mese come valore numerico.
Per 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
POSIXltoggetto pratico che rende superfluo il pacchetto zoo
La domanda non indicava esattamente quale output è previsto, ma supponendo che per il mese si desidera il numero del mese (gennaio = 1) e per l'anno si desidera l'anno numerico a 4 cifre, quindi assumendo che abbiamo appena eseguito il codice nella domanda:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012