Réponses:
Utilisez la format()méthode pour les objets de classe "yearmon". Voici votre exemple de date (correctement créé!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Ensuite, nous pouvons extraire les parties de date selon les besoins:
> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"
Ceux-ci sont renvoyés sous forme de caractères. Le cas échéant, indiquez as.numeric()si vous voulez que l'année ou le mois numérique soit une variable numérique, par exemple
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Voir ?yearmonet ?strftimepour plus de détails - ce dernier explique les caractères d'espace réservé que vous pouvez utiliser.
vectorde n éléments, disons 1k dates en un vector?
date1peut aussi être un vecteur de dates.
Le paquet lubrifiant est incroyable pour ce genre de chose:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridatepackage et j'ai essayé de l'installer et utilisé l'année (date) mais cela donne le jour au lieu de l'année cela ne fonctionne que sur les dates dont le format est "2015-05 -06 "?
Je sais que l'OP utilise zoo ici, mais j'ai trouvé ce fil de recherche sur Google pour une tssolution standard pour le même problème. J'ai donc pensé que j'ajouterais également une zooréponse gratuite 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"))
Vous pouvez utiliser format:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))pour le mois sous forme numérique par exemple.
Pour les grands vecteurs:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
POSIXltobjet pratique qui rend le paquet zoo inutile
La question n'indiquait pas précisément la sortie attendue, mais en supposant que pour le mois vous voulez le numéro du mois (janvier = 1) et pour l'année que vous voulez l'année numérique à 4 chiffres, en supposant que nous venons d'exécuter le code de la question:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012