Подтвердить что ты не робот

R Subset XTS по рабочим дням

Как подмножить объект xts, чтобы включать только будние дни (пн-пт, исключая субботу и воскресенье)?

4b9b3361

Ответ 1

Вот что я сделал бы:

library(xts)
data(sample_matrix)
sample.xts <- as.xts(sample_matrix, descr='my new xts object')
x <-  sample.xts['2007']  
x[!weekdays(index(x)) %in% c("Saturday", "Sunday")]

ИЗМЕНИТЬ: Joshua Ulrich в комментариях указывает на лучшее решение, используя .indexwday(), одно из семейства встроенных функций доступа для извлечения фрагментов индекса объектов класса xts. Кроме того, как решение Dirk Eddelbuettel, следующее должно быть не зависящим от языка:

x[.indexwday(x) %in% 1:5]

Ответ 2

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

> mydates <- Sys.Date() + 0:6
> mydates
[1] "2012-01-31" "2012-02-01" "2012-02-02" "2012-02-03" "2012-02-04" 
+   "2012-02-05" "2012-02-06"
> we <- sapply(mydates, function(d) { as.POSIXlt(d)$wday}) %in% c(0, 6)
> we
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
> mydates[ ! we ]
[1] "2012-01-31" "2012-02-01" "2012-02-02" "2012-02-03" "2012-02-06"
> 

Это действительно не вопрос xts, а базовая обработка даты.