Дійсно, як було згадано вище (та в інших місцях на 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")