2012-01-31 7 views

Odpowiedz

15

Oto co zrobię:

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: Joshua Ulrich w komentarzach wskazuje na lepsze rozwiązanie korzystając .indexwday(), jeden z rodziny wbudowanych funkcji dostępowych do ekstrakcji fragmenty obiektów klasy xts. Ponadto, jak rozwiązania Dirk Eddelbuettel za dodaje powinny być niezależne od ustawień regionalnych:

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

pokażę zasadniczo tę samą odpowiedź, ale opierając się na dni powszednie numerycznych, które czyni to niezależne od lokalizacji używanego. –

+9

+1 Zauważ, że istnieje funkcja '.indexwday', więc twoja ostatnia linia może być również:' x [.indexwday (x)% w% 1: 5] '. –

+0

@DirkEddelbuettel Dzięki za wskazanie, że na zewnątrz (i +1 chez vous). W przeciwnym razie nie doceniłbym różnicy. –

6

Obliczając dzień tygodnia z datą i podzbiorem. W tym przykładzie używam typu Date, ale rzutowanie na POSIXlt działa w ten sam sposób dla śróddziennych znaczników czasu w postaci 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" 
>  

To naprawdę nie jest pytanie xts, ale podstawowa obsługa daty.