Генерация временного ряда с определенной датой начала и окончания - PullRequest
10 голосов
/ 29 сентября 2011

Я хочу создать временной ряд со всеми рабочими датами в диапазоне:

startDate = "1990-01-01"
endDate = "1990-12-31"

Например, "1990-01-01", "1990-01-02", ...

Ответы [ 3 ]

14 голосов
/ 29 сентября 2011

@ csgillespie: chron предоставляет функцию is.weekend:

days = seq(as.Date("1990-01-01"), as.Date("1990-12-31"), by="1 day")
library(chron)
weekDays = days[!is.weekend(days)]

## let's check the result with the function weekdays
weekdays(weekDays)

Кроме того, вы можете получить те же результаты без chron, используя format:

isWeekend <- function(x) {format(x, '%w') %in% c(0, 6)}
weekDays2 = days[!isWeekend(days)]
5 голосов
/ 29 сентября 2011

Вы можете просто использовать команду seq. Например,

##Specify you want 10 dates starting on 1990-01-01
R> seq(as.Date("1990-01-01"), length.out=10, by="1 day")
 [1] "1990-01-01" "1990-01-02" "1990-01-03" "1990-01-04" "1990-01-05"
 [6] "1990-01-06" "1990-01-07" "1990-01-08" "1990-01-09" "1990-01-10"

или

##Specify the start and end with increment
R> seq(as.Date("1990-01-01"), as.Date("1990-01-10"), by="1 day")
 [1] "1990-01-01" "1990-01-02" "1990-01-03" "1990-01-04" "1990-01-05"
 [6] "1990-01-06" "1990-01-07" "1990-01-08" "1990-01-09" "1990-01-10"

Чтобы получить рабочие дни, вы можете использовать библиотеку chron:

days = seq(as.Date("1990-01-01"), as.Date("1990-12-31"), by="1 day")
library(chron)
weekDays = days[!is.weekend(days)]
2 голосов
/ 29 сентября 2011

Существует функция base с именем ?weekdays.

startDate = "1990-01-01"
endDate = "1990-12-31"

x <- seq(as.Date(startDate), to = as.Date(endDate), by="1 day")

x[!weekdays(x) %in% c("Sunday", "Saturday")]

Но, поскольку фактические названия дней будут зависеть от конкретной локали, обязательно установите их правильно.

Обратите внимание, что weekdays это просто оболочка для format(x, "%A").Смотрите ?strptime для получения подробной информации о кодах формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...