Jak mogę ustawić obiekt Xts tak, aby obejmował tylko dni powszednie (od poniedziałku do piątku, z wyłączeniem soboty i niedzieli)?R Podzbiór XTS w dni powszednie
12
A
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]
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.
pokażę zasadniczo tę samą odpowiedź, ale opierając się na dni powszednie numerycznych, które czyni to niezależne od lokalizacji używanego. –
+1 Zauważ, że istnieje funkcja '.indexwday', więc twoja ostatnia linia może być również:' x [.indexwday (x)% w% 1: 5] '. –
@DirkEddelbuettel Dzięki za wskazanie, że na zewnątrz (i +1 chez vous). W przeciwnym razie nie doceniłbym różnicy. –