преобразовать дату в числовое и обратно в дату

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

      Date
1990-12-31 
1991-12-31 
1992-12-31 
1993-12-31 
1994-06-30 
1994-12-31 

Я старался,

as.numeric(DF[1:6])
[1]  1  2  3  5  7
as.Date(as.numeric(DF[1:6]), "1990-12-31")
[1] "1991-01-01" "1991-01-02" "1991-01-03" "1991-01-05" "1991-01-07" "1991-01-08"

Я замечаю проблему временного интервала. Что я должен сделать, чтобы получить исходные даты?


person YellowRiver    schedule 16.01.2019    source источник
comment
Вы просто пытаетесь создать факторную переменную?   -  person dylanjm    schedule 16.01.2019
comment
Тот факт, что as.numeric(DF[1:6]) возвращает целые числа, означает, что class(DF$Date) равно factor. Используйте as.Date для прямого преобразования в объект даты. Обратите внимание, что вам нужно выбрать вектор, а не весь фрейм данных: as.Date(DF$Date)   -  person Mako212    schedule 16.01.2019
comment
Если вы предпочитаете использовать нотацию [row, column]: as.Date(DF[1:6, 1])   -  person Mako212    schedule 16.01.2019


Ответы (1)


Если у вас есть кадр данных со столбцом класса factor, как воспроизводимо показано в примечании в конце, то мы не хотим применять к нему as.numeric, поскольку это просто даст базовые коды для уровней факторов, которые не имеют смысла. Скорее это дает класс Date:

d <- as.Date(DF$Date)
d
## [1] "1990-12-31" "1991-12-31" "1992-12-31" "1993-12-31" "1994-06-30"
## [6] "1994-12-31"

и это дает количество дней с эпохи UNIX:

no <- as.numeric(d)
no
## [1] 7669 8034 8400 8765 8946 9130

и это возвращает это к классу Date:

as.Date(no, "1970-01-01")
## [1] "1990-12-31" "1991-12-31" "1992-12-31" "1993-12-31" "1994-06-30"
## [6] "1994-12-31"

Примечание

Lines <- "
      Date
1990-12-31 
1991-12-31 
1992-12-31 
1993-12-31 
1994-06-30 
1994-12-31 "
DF <- read.table(text = Lines, header = TRUE)
person G. Grothendieck    schedule 16.01.2019
comment
Благодарю вас! Что, если у меня есть только месяц и год? самый короткий ответ, который я могу придумать, это format(as.Date(as.numeric(as.Date(paste(DF$Date,"-01",sep=" ")))), "%Y-%m"). Любой совет? - person YellowRiver; 17.01.2019
comment
Если ваша цель состоит в том, чтобы просто преобразовать множитель в строку символов, а f - это множитель, то as.character(f) или format(f) - person G. Grothendieck; 17.01.2019