Respostas:
Use o format()
método para objetos de classe "yearmon"
. Aqui está sua data de exemplo (criada corretamente!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Então, podemos extrair as partes da data conforme necessário:
> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"
Eles são retornados como caracteres. Quando apropriado, inclua as.numeric()
se quiser o ano ou mês numérico como uma variável numérica, por exemplo
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Consulte ?yearmon
e ?strftime
para obter detalhes - o último explica os caracteres de espaço reservado que você pode usar.
vector
de n elementos, digamos 1k datas em um vector
?
date1
pode ser um vetor de datas também.
O pacote de lubrificação é incrível para esse tipo de coisa:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridate
pacote não suporta e tentei instalar este e usei ano (data) mas ele fornece o dia em vez do ano isso só funciona em datas cujo formato é "2015-05 -06 "?
Eu sei que o OP está usando zoo
aqui, mas encontrei este tópico pesquisando por uma ts
solução padrão para o mesmo problema. Então, pensei em adicionar uma zoo
resposta gratuita para ts
também.
# 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"))
Você pode usar format
:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))
para o mês como um numérico, por exemplo.
Para vetores grandes:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
POSIXlt
objeto útil que torna o pacote zoo desnecessário
A pergunta não indicava exatamente qual saída é esperada, mas assumindo que para o mês você deseja o número do mês (janeiro = 1) e para o ano você deseja o ano numérico de 4 dígitos, então assumindo que acabamos de executar o código na pergunta:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012