web-dev-qa-db-fra.com

Extrait le mois et l'année d'un objet Zoo :: yearmon

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()

112
adam.888

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.

141
Gavin Simpson

Le paquet lubridate est incroyable pour ce genre de chose:

> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
99
Ari B. Friedman

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"))
15
Matt Bannert

Vous pouvez utiliser format:

library(Zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
12
James

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
5
user3226167

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
0
G. Grothendieck