Создайте последовательность времени, используя R и lubridate

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

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))

Ошибка: несовместимые классы продолжительности (продолжительность, числовые). Пожалуйста, уговорите as.duration.

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


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


person Carl PCH    schedule 14.02.2017    source источник
comment
Просто используйте seq.Date. Это немного волшебства; Вы можете передать это by = '2 weeks', и он разберется.   -  person alistaire    schedule 14.02.2017
comment
Спасибо, @GGamba, я не понял, что в by= можно указать "недели" и "годы" для seq()   -  person Carl PCH    schedule 14.02.2017
comment
@alistaire, спасибо. Это тоже работает как шарм.   -  person Carl PCH    schedule 14.02.2017
comment
Когда вы были на ?seq странице, вы, должны также перейти по ссылке на ?seq.Date, где ответ стал бы очевидным.   -  person IRTFM    schedule 14.02.2017
comment
@ 42- это совершенно справедливо. Я должен был изучить документацию дальше   -  person Carl PCH    schedule 14.02.2017


Ответы (1)


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

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

or:

seq(as.Date("2000/1/1"), by = "month", length.out = 12)
person Dan    schedule 21.02.2017