Wie oben (und an anderer Stelle in SO) erwähnt, benötigen Sie zum Konvertieren der Zeichenfolge in ein Datum ein bestimmtes Datum des Monats. Von der as.Date()
Handbuchseite:
Wenn die Datumszeichenfolge das Datum nicht vollständig angibt, ist die zurückgegebene Antwort möglicherweise systemspezifisch. Das häufigste Verhalten ist die Annahme, dass ein fehlendes Jahr, ein fehlender Monat oder ein fehlender Tag das aktuelle ist. Wenn ein Datum falsch angegeben wird, geben zuverlässige Implementierungen einen Fehler aus und das Datum wird als NA gemeldet. Leider sind einige gängige Implementierungen (z. B. glibc
) unzuverlässig und erraten die beabsichtigte Bedeutung.
Eine einfache Lösung wäre, das Datum "01"
in jedes Datum einzufügen und strptime()
es als ersten Tag dieses Monats anzugeben.
Für diejenigen, die etwas mehr Hintergrundinformationen zur Verarbeitung von Datum und Uhrzeit in R suchen:
In R verwenden Zeiten POSIXct
und POSIXlt
Klassen und Daten die Date
Klasse.
Daten werden als Anzahl der Tage seit dem 1. Januar 1970 und Zeiten als Anzahl der Sekunden seit dem 1. Januar 1970 gespeichert.
Also zum Beispiel:
d <- as.Date("1971-01-01")
unclass(d) # one year after 1970-01-01
# [1] 365
pct <- Sys.time() # in POSIXct
unclass(pct) # number of seconds since 1970-01-01
# [1] 1450276559
plt <- as.POSIXlt(pct)
up <- unclass(plt) # up is now a list containing the components of time
names(up)
# [1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst" "zone"
# [11] "gmtoff"
up$hour
# [1] 9
So führen Sie Operationen an Datum und Uhrzeit durch:
plt - as.POSIXlt(d)
# Time difference of 16420.61 days
Und um Daten zu verarbeiten, können Sie Folgendes verwenden strptime()
(Ausleihen dieser Beispiele von der Handbuchseite):
strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
# [1] "2006-02-20 11:16:16 EST"
# And in vectorized form:
dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
strptime(dates, "%d%b%Y")
# [1] "1960-01-01 EST" "1960-01-02 EST" "1960-03-31 EST" "1960-07-30 EDT"