J’ai un object yearmon
:
require(zoo) date1 <- as.yearmon("Mar 2012", "%b %Y") class(date1) # [1] "yearmon"
Comment puis-je extraire le mois et l’année de cela?
month1 <- fn(date1) year1 <- fn(date1)
Quelle fonction dois-je utiliser à la place de fn()
Utilisez la méthode format()
pour les objects 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 comme requirejs:
> 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, as.numeric()
si vous souhaitez 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 ?yearmon
et ?strftime
pour plus de détails - ce dernier explique les caractères de ?strftime
que vous pouvez utiliser.
Le paquet lubrifiant 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 de discussion pour une solution standard ts
pour le même problème. Alors j’ai pensé que j’appendais une réponse sans zoo
pour ts
aussi.
# 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 le 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 n’indique pas précisément quelle sortie est 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 dans la question:
cycle(date1) ## [1] 3 as.integer(date1) ## [1] 2012