Return data subset time frames within another timeframes?
You can use the .index*
family of functions to get certain months or certain days of the month. See ?index
for the full list of functions. For example:
library(quantmod)getSymbols("SPY")SPY[.indexmon(SPY)==0] # January for all years (note zero-based indexing!)SPY[.indexmday(SPY)==1] # The first of every monthSPY[.indexwday(SPY)==1] # All Mondays
time-of-day subsetting is a little bit hidden, so I understand why it would spark a question like this. The only other 'trick' I know is the last
and first
functions, which you can nest if you need to. e.g. this will get the last 2 days of the first 3 weeks.
last(first(my_xts, "3 weeks"), "2 days")
Be aware that there appears to be different behavior for xts
subsetting of a yearmon date format for windows and 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']
The result for x2
is consistent between windows and ubuntu, since the format is full date. However, the x3
will produce different result for windows and ubuntu, after the conversion of the dates to yearmon.