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 ?yearmon
und ?strftime
für Details - letzteres erklärt die Platzhalterzeichen, die Sie verwenden können.
vector
von n Elementen hätte, sagen wir 1k Daten in einem vector
?
date1
auch ein Datumsvektor sein .
Das Lubridat-Paket ist für diese Art von Dingen erstaunlich:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridate
Paket 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 zoo
hier verwendet wird, aber ich habe festgestellt, dass dieser Thread nach einer Standardlösung ts
für dasselbe Problem googelt . Also dachte ich, ich würde auch eine zoo
kostenlose 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
POSIXlt
Objekt 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