Extrahiere Monat und Jahr aus einem Zoo :: Jahrmonster

Ich habe ein yearmon :

 require(zoo) date1 <- as.yearmon("Mar 2012", "%b %Y") class(date1) # [1] "yearmon" 

Wie kann ich Monat und Jahr daraus extrahieren?

 month1 <- fn(date1) year1 <- fn(date1) 

Welche function sollte ich anstelle von fn() ?

Verwenden Sie die format() -Methode für Objekte der class "yearmon" . Hier ist Ihr Beispieldatum (richtig erstellt!)

 date1 < - as.yearmon("Mar 2012", "%b %Y") 

Dann können wir die Datumsteile nach Bedarf extrahieren:

 > format(date1, "%b") ## Month, char, abbreviated [1] "Mar" > format(date1, "%Y") ## Year with century [1] "2012" > format(date1, "%m") ## numeric month [1] "03" 

Diese werden als Zeichen zurückgegeben. as.numeric() in as.numeric() wenn das Jahr oder der numerische Monat als numerische Variable verwendet werden soll, z

 > as.numeric(format(date1, "%m")) [1] 3 > as.numeric(format(date1, "%Y")) [1] 2012 

Siehe ?yearmon und ?strftime für Details - Letzteres erläutert die Platzhalterzeichen, die Sie verwenden können.

Das Lubridate-Paket ist für diese Art von Sache erstaunlich:

 > require(lubridate) > month(date1) [1] 3 > year(date1) [1] 2012 

Ich weiß, dass der OP zoo hier benutzt, aber ich fand diesen Thread, der nach einer Standard- ts Lösung für das gleiche Problem googelt. Also dachte ich, ich würde auch eine zoo freie Antwort für ts hinzufügen.

 # 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")) 

Sie können das format :

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

Für große Vektoren:

 y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900 m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11 

Die Frage hat nicht genau angegeben, welche Ausgabe erwartet wird, aber unter der Annahme, dass Sie für Monat die Monatszahl (Januar = 1) und für das Jahr die 4stellige Jahreszahl möchten, vorausgesetzt, dass wir den Code in der Frage gerade ausgeführt haben:

 cycle(date1) ## [1] 3 as.integer(date1) ## [1] 2012