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 ?yearmon
e ?strftime
per i dettagli: quest'ultimo spiega i caratteri segnaposto che puoi utilizzare.
vector
di n elementi, diciamo 1k date in uno vector
?
date1
può 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
lubridate
pacchetto 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 zoo
qui, ma ho trovato questo thread che cerca su Google una ts
soluzione standard per lo stesso problema. Quindi ho pensato di aggiungere anche una zoo
risposta 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
POSIXlt
oggetto 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