R Strptime Год и месяц без разделителя, возвращающегося NA - PullRequest
12 голосов
/ 29 июля 2011

Я, вероятно, делаю что-то глупое и не вижу этого, но:

> strptime("201101","%Y%m")
[1] NA

Из справки strptime:

% Y Год с веком
% m Месяцкак десятичное число (01–12)

1 Ответ

15 голосов
/ 29 июля 2011

Просто вставьте поле дня (скажем, "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 , который является более щедрым и вменяет пропущенный день (или день / час / минуту / секунду во втором случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...