В самом деле, как уже упоминалось выше (и в других местах на SO), для преобразования строки в дату вам нужна конкретная дата месяца. На as.Date()
странице руководства:
Если в строке даты дата не указана полностью, возвращаемый ответ может зависеть от системы. Чаще всего предполагается, что текущий год, месяц или день - это пропущенный год. Если дата указана неправильно, надежные реализации выдадут ошибку, и дата будет указана как NA. К сожалению, некоторые распространенные реализации (например, glibc
) ненадежны и предполагают предполагаемое значение.
Простым решением было бы вставить дату "01"
в каждую дату и использовать ее strptime()
для обозначения первого дня этого месяца.
Для тех, кто хочет получить дополнительную информацию о датах и времени обработки в R:
В R время используется, POSIXct
а POSIXlt
классы и даты используют Date
класс.
Даты хранятся как количество дней с 1 января 1970 года, а время - как количество секунд с 1 января 1970 года.
Так, например:
d <- as.Date("1971-01-01")
unclass(d)
pct <- Sys.time()
unclass(pct)
plt <- as.POSIXlt(pct)
up <- unclass(plt)
names(up)
up$hour
Для выполнения операций с датой и временем:
plt - as.POSIXlt(d)
А для обработки дат вы можете использовать strptime()
(заимствуя эти примеры из справочной страницы):
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")