Как подмножить объект xts, чтобы включать только будние дни (пн-пт, исключая субботу и воскресенье)?
R Subset XTS по рабочим дням
Ответ 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
, а базовая обработка даты.