Antworten:
Verwenden Sie die format()Methode für Objekte der Klasse "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. Fügen Sie gegebenenfalls ein, as.numeric()wenn Sie das Jahr oder den numerischen Monat als numerische Variable verwenden möchten, z
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Siehe ?yearmonund ?strftimefür Details - letzteres erklärt die Platzhalterzeichen, die Sie verwenden können.
vectorvon n Elementen hätte, sagen wir 1k Daten in einem vector?
date1auch ein Datumsvektor sein .
Das Lubridat-Paket ist für diese Art von Dingen erstaunlich:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridatePaket nicht unterstützt wird, und habe versucht, dieses und das verwendete Jahr (Datum) zu installieren, aber es gibt den Tag anstelle des Jahres an. Funktioniert dies nur an Daten, deren Format "2015-05" ist -06 "?
Ich weiß, dass das OP zoohier verwendet wird, aber ich habe festgestellt, dass dieser Thread nach einer Standardlösung tsfür dasselbe Problem googelt . Also dachte ich, ich würde auch eine zookostenlose Antwort hinzufügen 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"))
Sie können verwenden format:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))für den Monat beispielsweise eine Zahl.
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
POSIXltObjekt bereitstellt, das das Zoo-Paket unnötig macht
In der Frage wurde nicht genau angegeben, welche Ausgabe erwartet wird, sondern unter der Annahme, dass Sie für den Monat die Monatsnummer (Januar = 1) und für das Jahr das numerische 4-stellige Jahr möchten, und dann angenommen, dass wir gerade den Code in der Frage ausgeführt haben:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012