subconjuntos - subconjunto impropio
Devolver los marcos de tiempo del subconjunto de datos dentro de otros marcos de tiempo? (3)
Hay formas muy ingeniosas de xts
objetos xts
. Por ejemplo, uno puede obtener todos los datos de todos los años, meses, días pero estrictamente entre las 9:30 AM y las 4 PM haciendo:
my_xts["T09:30/T16:00"]
O puede obtener todas las observaciones entre dos fechas haciendo:
my_xts["2012-01-01/2012-03-31"]
O todas las fechas antes / después de una cierta fecha al hacer:
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 solo para ciertos meses para todos los años o solo ciertos días para todos los meses y años? ¿Existen otros trucos de subconjuntos?
Puede usar 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
Tenga en cuenta que parece haber un comportamiento diferente para el xts
xts de un formato de fecha anual 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 Windows y ubuntu, ya que el formato es la fecha completa. Sin embargo, el x3
producirá resultados diferentes para windows y ubuntu, después de la conversión de las fechas a yearmon.
la subconjunto de la hora del día está un poco oculta, así que entiendo por qué provocaría una pregunta como esta. El único otro "truco" que conozco es la last
y la first
función, que puedes anidar si lo necesitas. por ejemplo, esto obtendrá los últimos 2 días de las primeras 3 semanas.
last(first(my_xts, "3 weeks"), "2 days")