Devolver los marcos de tiempo del subconjunto de datos dentro de otros marcos de tiempo?

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 

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") 

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.