J'ai un objet yearmon
:
require(Zoo)
date1 <- as.yearmon("Mar 2012", "%b %Y")
class(date1)
# [1] "yearmon"
Comment puis-je en extraire le mois et l'année?
month1 <- fn(date1)
year1 <- fn(date1)
Quelle fonction devrais-je utiliser à la place de fn()
Utilisez la méthode format()
pour les objets de la 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 retournés sous forme de caractères. Le cas échéant, insérez as.numeric()
si vous voulez que l'année ou le mois numérique soit une variable numérique, par ex.
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Voir ?yearmon
et ?strftime
pour plus de détails - ce dernier explique les caractères de substitution que vous pouvez utiliser.
Le paquet lubridate est incroyable pour ce genre de chose:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
Je sais que l'OP utilise Zoo
ici, mais j'ai trouvé ce fil en train de chercher Google pour une solution standard ts
pour le même problème. J'ai donc pensé ajouter une réponse Zoo
- free pour 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"
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
La question ne précisait pas quelle sortie était attendue, mais supposait que pour le mois vous vouliez le numéro du mois (janvier = 1) et pour l'année que vous souhaitiez l'année numérique à 4 chiffres, en supposant que nous venions d'exécuter le code dans la question:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012