Rzeczywiście, jak wspomniano powyżej (i gdzie indziej w SO), aby przekonwertować ciąg na datę, potrzebujesz określonej daty miesiąca. Ze strony as.Date()
podręcznika:
Jeśli ciąg daty nie określa całkowicie daty, zwrócona odpowiedź może być specyficzna dla systemu. Najczęstszym zachowaniem jest założenie, że brakujący rok, miesiąc lub dzień jest bieżącym. Jeśli poda nieprawidłową datę, niezawodne implementacje spowodują błąd, a data zostanie zgłoszona jako NA. Niestety, niektóre typowe implementacje (takie jak glibc
) są zawodne i odgadują zamierzone znaczenie.
Prostym rozwiązaniem byłoby wklejenie daty "01"
do każdej daty i strptime()
wskazanie jej jako pierwszego dnia danego miesiąca.
Dla tych, którzy szukają trochę więcej informacji na temat dat i godzin przetwarzania w R:
W języku R czasy POSIXct
i POSIXlt
klasy oraz daty używają Date
klasy.
Daty są przechowywane jako liczba dni od 1 stycznia 1970 r., A czasy są przechowywane jako liczba sekund od 1 stycznia 1970 r.
Na przykład:
d <- as.Date("1971-01-01")
unclass(d)
pct <- Sys.time()
unclass(pct)
plt <- as.POSIXlt(pct)
up <- unclass(plt)
names(up)
up$hour
Aby wykonać operacje na datach i godzinach:
plt - as.POSIXlt(d)
Aby przetwarzać daty, możesz użyć strptime()
(zapożyczając te przykłady ze strony podręcznika):
strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
strptime(dates, "%d%b%Y")