R: преобразовать список дат символов в дни с заданного происхождения

Мне нужно создать список для прикрепления в качестве измерения времени для файла NetCDF. Этот файл был составлен из множества файлов, которые были сгенерированы как среднемесячные из 6-часовых данных. В результате каждое t наблюдение представляет собой просто хронологическое значение файла в стеке.

Сначала я сгенерировал последовательность дат, преобразовал ее в символы, а затем создал объект даты, в котором указано, что источником интереса является источник интереса. Моя цель состояла в том, чтобы получить целочисленный список «дней с 1850-01-01», однако, преобразуя в целое число, я вижу, что используемое происхождение по-прежнему является R по умолчанию «1970-01-01».

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

Код выглядит следующим образом

dates <- seq(as.Date("1901-01-01"), by = "month", length.out = 12)
dates <- as.character(dates)

o <- as.Date("1850-01-01")

dates <- as.Date(dates, origin = o)
dates
dates <- as.numeric(dates)

person Gary Lynam    schedule 18.03.2020    source источник
comment
Зачем использовать что-то настолько сложное? Почему простое вычисление разницы во времени (например, с использованием difftime) не работает?   -  person Annet    schedule 18.03.2020
comment
Спасибо за комментарий. Это также отлично работает.   -  person Gary Lynam    schedule 18.03.2020


Ответы (1)


Преобразуйте dates в класс Date, вычтите o и преобразуйте это в числовое:

as.numeric(as.Date(dates) - o)
## [1] 18627 18658 18686 18717 18747 18778 18808 18839 18870 18900 18931 18961

Поочередно конвертируйте оба в числовые:

as.numeric(as.Date(dates)) - as.numeric(o)

или используйте difftime

as.numeric(difftime(as.Date(dates), o, unit = "day"))
person G. Grothendieck    schedule 18.03.2020
comment
Бесконечно благодарен. Это работает отлично. Также спасибо d.b за внимание к происхождению. - person Gary Lynam; 18.03.2020
comment
Для справки, я получаю тот же результат, используя юлиан следующим образом: юлиан (даты, происхождение = as.Date (1850-01-01)) - person Gary Lynam; 18.03.2020