Eu tenho um yearmon
objeto:
require(zoo)
date1 <- as.yearmon("Mar 2012", "%b %Y")
class(date1)
# [1] "yearmon"
Como posso extrair o mês e o ano disso?
month1 <- fn(date1)
year1 <- fn(date1)
Qual função devo usar no lugar de fn()
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 umvector
?date1
pode ser um vetor de datas também.O pacote de lubrificação é incrível para esse tipo de coisa:
fonte
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 umats
solução padrão para o mesmo problema. Então, pensei em adicionar umazoo
resposta gratuita parats
também.fonte
Você pode usar
format
:fonte
as.numeric(format(x, "%m"))
para o mês como um numérico, por exemplo.Para vetores grandes:
fonte
POSIXlt
objeto útil que torna o pacote zoo desnecessárioA 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:
fonte
Tendo tido um problema semelhante com dados de 1800 até agora, isso funcionou para mim:
fonte