переменные даты в R - PullRequest
       44

переменные даты в R

0 голосов
/ 27 июня 2018

У меня есть даты, которые до 1969 года хранятся как символы, и я хочу изменить их на столбец даты.

Это код, который я пробовал

options(chron.year.expand = 
          function (y, cut.off = 19, century = c(1900, 2000), ...) {
            chron:::year.expand(y, cut.off = cut.off, century = century, ...)
          }
)

test$construction_date2<-as.Date(chron(format(as.Date(test$construction_date,  "%d-%b-%y"),"%d/%m/%Y")))

Но я получаю предупреждение:

Warning message:
In convert.dates(dates., format = fmt, origin. = origin.) :
  224 months out of range set to NA

С выходом:

construction_date     contruction_date2
23-MAR-59                  2059-03-23
05-JUN-95                  1995-06-05
30-MAY-87                  1987-05-30
15-JAN-18                  NA
01-FEB-68                  2068-02-01

Может кто-нибудь сказать мне, где я иду не так?

Воспроизводимый пример;

constuction_date<-c("23-MAR-59","05-JUN-95","30-MAY-87","15-JAN-18","01-FEB-68")

Ожидаемый результат:

construction_date     contruction_date2
23-MAR-59                  1959-03-23
05-JUN-95                  1995-06-05
30-MAY-87                  1987-05-30
15-JAN-18                  2018-01-15
01-FEB-68                  1968-02-01

1 Ответ

0 голосов
/ 27 июня 2018

Ваша проблема заключалась в том, что вы использовали as.Date, который представляет неоднозначные даты после 1970 года (см. здесь ). Вывод вектора, который вы передали в chron, используя as.Date:

> as.Date(construction_date,"%d-%b-%y")
[1] "2059-03-23" "1995-06-05" "1987-05-30" "2018-01-15" "2068-02-01"

Правильный способ сделать это - не использовать as.Date для предварительного преобразования даты, а использовать chron с опцией format напрямую:

options(chron.year.expand = 
          function (y, cut.off = 19, century = c(1900, 2000), ...) {
            chron:::year.expand(y, cut.off = cut.off, century = century, ...)
          }
)

> as.Date(chron(dates.=construction_date,format="day-month-year"))
[1] "1959-03-23" "1995-06-05" "1987-05-30" "2018-01-15" "1968-02-01"
...