Ich verwende das Paket lubridate
und wende die Funktion month
an, um den Monat aus dem Datum zu extrahieren. Ich habe den str-Befehl für das Datumsfeld ausgeführt und erhielt
Factor w/ 9498 levels "01/01/1979","01/01/1980",..: 5305 1 1 1 1 1 1 1 1 1 ...
> v1$Date<-month(v1$Date)
Error in as.POSIXlt.character(as.character(x), ...) :
character string is not in a standard unambiguous format
Hier ist ein Beispiel für meinen Datenrahmen
https://drive.google.com/file/d/0B6cqWmwsEk20Q2dHblhXZi14Wk0/edit?usp=sharing
Ich weiß nicht, was ich falsch mache.
Monat" angibt:
Date-time muss ein POSIXct, POSIXlt, Date, Period, chron, yearmon sein, yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries, und fts Objekte.
Ihr Objekt ist ein Faktor, nicht einmal ein Zeichenvektor (vermutlich aufgrund von stringsAsFactors = TRUE
). Sie müssen Ihren Vektor in eine Datetime-Klasse konvertieren, zum Beispiel in POSIXlt
:
library(lubridate)
some_date <- c("01/02/1979", "03/04/1980")
month(as.POSIXlt(some_date, format="%d/%m/%Y"))
[1] 2 4
Es gibt auch eine Komfortfunktion dmy
, die das gleiche kann (Tipp von @Henrik):
month(dmy(some_date))
[1] 2 4
Noch weiter gehend, gibt @IShouldBuyABoat einen weiteren Hinweis darauf, dass dd/mm/yyyy-Zeichenformate ohne explizites Casting akzeptiert werden:
month(some_date)
[1] 2 4
Eine Liste der Formate finden Sie unter ?strptime
. Sie werden feststellen, dass "standard unambiguous format" steht für
Die Standardformate folgen den Regeln des internationalen ISO 8601 Standard, der einen Tag als "2001-02-28" und eine Uhrzeit als "14:01:02" mit führenden Nullen wie hier.
Ohne die Notwendigkeit eines externen Pakets:
wenn Ihr Datum das folgende Format hat:
myDate = as.POSIXct("2013-01-01")
Dann erhalten Sie die Monatsnummer:
format(myDate,"%m")
Und um die Monatszeichenfolge zu erhalten:
format(myDate,"%B")
können Sie es in das Datumsformat umwandeln, indem Sie...
new_date<- as.Date(old_date, "%m/%d/%Y")}
aus new_date
, den Monat erhält man durch strftime()
Monat<- strftime(neues_datum, "%m")`
old_date<- "01/01/1979"
new_date<- as.Date(old_date, "%m/%d/%Y")
new_date
#[1] "1979-01-01"
month<- strftime(new_date,"%m")
month
#[1] "01"
year<- strftime(new_date, "%Y")
year
#[1] "1979"