Extraire le mois et l’année d’un object zoo :: yearmon

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