2012-08-08 10 views
45

hay formas muy ingeniosas de subconjuntos de objetos xts. Por ejemplo, uno puede obtener todos los datos de todos los años, meses, días, pero siendo estrictamente entre las 9:30 AM y las 4 PM haciendo:datos de retorno subconjunto de marcos de tiempo dentro de otros marcos de tiempo?

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

O usted puede conseguir todas las observaciones entre dos fechas haciendo:

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

o todas las fechas antes/después de una fecha determinada haciendo:

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

¿Cómo puedo obtener todos los datos para solamente algunos meses para todos los años o sólo ciertos días para todos los meses y años ? ¿Existen otros trucos de subconjuntos?

+2

Ha visto quantmod.com? Específicamente, los ejemplos http://www.quantmod.com/examples/data/ – GSee

+0

Aquí se muestra cómo invertir un subconjunto, usando 'which.i': http://stackoverflow.com/a/32029644/841830 –

+0

Para uno año 'dt ['2009',]', filtrando el año y el mes 'dt [': 2009-01',]' y utilizando un intervalo de fechas: 'dt ['2009-01-01 :: 2009-02-01' ] '. – marbel

Respuesta

37

Puede utilizar la familia de funciones .index* para obtener ciertos meses o ciertos días del mes. Ver ?index para la lista completa de funciones. Por ejemplo:

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

Muy agradable. Nunca recuerdo esos. – GSee

+12

Considero que esto significa ser especialmente por los autores de paquetes, ya que estas funciones de utilidad _hide_ detrás de un punto. –

15

subconjuntos de la hora del día es un poco escondido, por lo que entiendo por qué sería provocar una pregunta como esta. El único otro 'truco' Sé que es la last y first funciones, que puede anidar si es necesario. p.ej. esto obtendrá los últimos 2 días de las primeras 3 semanas.

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

Tenga en cuenta que no parece ser un comportamiento diferente para xts de subconjuntos de un formato de fecha yearmon para Windows y Ubuntu.

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'] 

El resultado para x2 es consistente entre las ventanas y ubuntu, ya que el formato es la fecha completa. Sin embargo, el producirá resultados diferentes para windows y ubuntu, después de la conversión de las fechas a yearmon.

Cuestiones relacionadas