2012-01-31 5 views
12

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

ответ

15

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

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

EDIT: Джошуа Ulrich в комментариях указывает лучшее решение, используя .indexwday(), один из семейства встроенных функций доступа для извлечения фрагменты индекса объектов xts. Кроме того, как решение Дирка Eddelbuettel, имеет место следующее должно быть независимым от языковых настроек:

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

Я показываю по существу один и тот же ответ, но, опираясь на цифровые рабочие дни, которые делает его независимым от местности, используемой. –

+9

+1 Обратите внимание, что существует функция '.indexwday', поэтому ваша последняя строка также может быть:' x [.indexwday (x)% in% 1: 5] '. –

+0

@DirkEddelbuettel Спасибо, что указали это (и +1 chez vous). В противном случае я бы не оценил разницу. –

6

Вычисляя день недели, учитывая дату и подмножество. В примере я использую тип 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, а базовая обработка данных.

Смежные вопросы