Просто вставьте поле дня (скажем, "01"), которое вы игнорируете:
R> shortdate <- "201101"
R> as.Date(paste(shortdate, "01", sep=""), "%Y%m%d")
[1] "2011-01-01"
R>
Я предпочитаю as.Date()
для дат и strptime()
для POSIXct
объектов, т.е. даты и времени.
Затем можно преобразовать проанализированный Date
объект в POSIXlt
объект для извлечения года и месяца:
R> mydt <- as.Date(paste(shortdate, "01", sep=""), "%Y%m%d")
R> myp <- as.POSIXlt(mydt)
R> c(myp$year, myp$mon)
[1] 111 0
R>
Это стандартное поведение POSIX с годами как "год - 1900" и месяцами с нулевым индексом.
Отредактируйте семь лет спустя: Для полноты и, как кто-то только что проголосовал за это, функции в моем пакете в любое время могут помочь:
R> anytime::anydate("201101") ## returns a Date
[1] "2011-01-01"
R> anytime::anytime("201101") ## returns a Datetime
[1] "2011-01-01 CST"
R>
Использование другого анализатора (из Boost Date_time , который является более щедрым и вменяет пропущенный день (или день / час / минуту / секунду во втором случае).