2017-02-14 2 views
2

Существует ли эффективный способ генерации вектора временной последовательности с tidyverse и lubridate? Я знаю, что они могут работать с seq(), если использовать число дат как интервал. Например, при входе:Создать последовательность времени с использованием R и lubridate

seq(today(), today()+dyears(1), 60) 

можно получить ряд дат с 60-дневным интервалом

"2017-02-14" "2017-04-15" "2017-06-14" "2017-08-13" "2017-10-12" "2017-12-11" "2018-02-09" 

Однако, есть ли способ, что это может работать на недель, месяцев и лет также? Возможно, что-то похожее на приведенный ниже код, который я думал, будет работать, но не:

seq(as_date(2000-01-01), as_date(2017-01-01), dyears(1)) 

Error: Incompatible duration classes (Duration, numeric). Please coerce with as.duration .

Я знаю, что можно изменить dyears(1) в 365 или 30 если одна нужна только приближение за год или месяц, но задавался вопросом, есть ли более разумные способы учета високосных лет и месяцев.


Чтобы обеспечить больше контекста, я хотел бы, чтобы сгенерировать вектор даты, так что я могу настроить scale_x_date в ggplot. Вместо того, чтобы показывать дисплей waiver() 2000, 2003, 2006, 2009, я хочу, чтобы сюжет имел все отдельные годы или даже каждый трехмесячный период, если это было возможно.

+4

'SEQ (сегодня(), сегодня() + dyears (1), по неделям = ') ' – GGamba

+2

Просто используйте' seq.Date'. Это немного волшебство; вы можете передать его 'by = '2 weeks'', и это выяснит. – alistaire

+0

Спасибо, @GGamba, я не понимал, что можно указать «недели» и «годы» в 'by =' для 'seq()' –

ответ

2

вы можете попробовать использовать seq.Date():

seq.Date(from=as.Date("2000-01-01"), to=as.Date("2010-01-01"), by="month") 

или:

seq(as.Date("2000/1/1"), by = "month", length.out = 12) 
Смежные вопросы