Если у вас есть
x <- c(200502, 200503)
, то
as.Date(x, origin = "2000-01-01")
говорит R, что вы хотите дни 200, 502 и 200, 503 дней после 2000-01-01.С help("as.Date")
:
as. Дата будет принимать числовые данные (количество дней с начала эпохи), но только если указано происхождение.
Итак, целое числоданные дают дни после предоставленного источника, а не какой-то числовой код для таких дат, как 200502 для "2005-02-01".
То, что вы хотите, это
as.Date(paste(substr(x, 1, 4), substr(x, 5, 6), "01", sep = "-"))
# [1] "2005-02-01" "2005-03-01"
paste(substr(x, 1, 4), substr(x, 5, 6), "01", sep = "-")
part берет ваши целые числа и создает строки типа
# [1] "2005-02-01" "2005-03-01"
Тогда as.Date()
знает, как с ними обращаться.
В качестве альтернативы вы можете сделать что-то вроде
as.Date(paste0(x, "01"), format = "%Y%m%d")
# [1] "2005-02-01" "2005-03-01"
Он просто вставляет "01"
в каждый элемент (для дня), преобразует в символ и сообщает as.Date()
в каком формате считать дату.(См. help("as.Date")
и help("strptime")
).