2012-08-08 4 views
45

Es gibt sehr raffinierte Möglichkeiten, xts Objekte zu unterteilen. Zum Beispiel kann man alle Daten für alle Jahre, Monate, Tage erhalten, aber streng von 9.30 bis 04.00 Uhr, indem Sie sein:Gibt Zeitrahmen für Datenuntergruppen innerhalb eines anderen Zeitrahmens zurück?

my_xts["T09:30/T16:00"] 

Oder Sie können alle Beobachtungen zwischen zwei Daten erhalten, indem Sie:

my_xts["2012-01-01/2012-03-31"] 

oder alle Termine vor/nach einem bestimmten Datum, indem Sie:

my_xts["/2011"] # from start of data until end of 2011 
my_xts["2011/"] # from 2011 until the end of the data 

Wie kann ich nur für bestimmte Monate für alle Jahre oder nur bestimmte Tage für alle Monate und Jahre, um alle Daten zu erhalten ? Gibt es noch andere Subsetting-Tricks?

+2

Haben Sie quantmod.com gesehen? Genauer gesagt, die Beispiele http://www.quantmod.com/examples/data/ – GSee

+0

Hier ist, wie Sie eine Teilmenge mit 'which.i' invertieren: http://StackOverflow.com/a/32029644/841830 –

+0

Zum einen Jahr 'dt ['2009',]', Filterung von Jahr und Monat 'dt [': 2009-01',]' und Verwendung eines Datumsbereichs: 'dt ['2009-01-01 :: 2009-02-01' ] '. – marbel

Antwort

37

können Sie die .index* Familie von Funktionen verwenden, um bestimmte Monate oder bestimmte Tage des Monats zu erhalten. Eine vollständige Liste der Funktionen finden Sie unter ?index. Zum Beispiel:

library(quantmod) 
getSymbols("SPY") 
SPY[.indexmon(SPY)==0] # January for all years (note zero-based indexing!) 
SPY[.indexmday(SPY)==1] # The first of every month 
SPY[.indexwday(SPY)==1] # All Mondays 
+0

Sehr schön. Ich erinnere mich nie an diese. – GSee

+12

Ich halte das von den Paketautoren besonders gemein, da sie diese Utility-Funktionen hinter einem Punkt verbergen. –

15

Uhrzeit-Subsetting ist ein wenig versteckt, so verstehe ich, warum es eine Frage wie diese auslösen würde. Der einzige andere "Trick", den ich kenne, sind die last und first Funktionen, die Sie bei Bedarf verschachteln können. z.B. Dies wird die letzten 2 Tage der ersten 3 Wochen bekommen.

last(first(my_xts, "3 weeks"), "2 days") 
1

bewusst sein, dass es für xts subsetting eines yearmon Datumsformat für Fenster und ubuntu, anders zu sein Verhalten erscheint.

library(quantmod) 
library(xts) 

getSymbols("SPY", src="google", from = "2004-01-01") 
x1 <- SPY['2006-01/2007-12'] 

x2 <- apply.monthly(x1,mean) 
x2['2006-01/2007-12'] 

x3 <- as.xts(coredata(x2),order.by = as.yearmon(index(x2))) 
x3['2006-01/2007-12'] 

Das Ergebnis für x2 ist konsistent zwischen den Fenstern und ubuntu, da das Format vollständig aktuell ist. Die wird jedoch unterschiedliche Ergebnisse für Windows und Ubuntu nach der Konvertierung der Daten in Jahrmonat produzieren.

Verwandte Themen