2012-03-18 81 views
2

我有一个长达数年的动物园对象。R:将长久动物园时间系列分成日历

这是一个时间序列,每天的报价(第一列:日期,第二栏:行情)

我要拆分这漫长的时间序列为历年子集,其最终目标是绘制在这些数据单个图表,其横轴为一年的长度。

(我不想将我的源日常数据转换为月度数据或任何其他时间步...)。

谢谢。

回答

0

这里有一种方法

library(quantmod) 
getSymbols("SPY", src='yahoo', from='2000-01-01', to='2012-01-01') 
SPY <- as.zoo(Ad(SPY)) 
# Now I have zoo data with a single value for each day (like you say you have) 
# Convert it to xts so that I can use xts' split method 
mydata <- as.xts(SPY) 
# Split data by years. Give them rownames that are day of year instead of 
# specific dates. cbind data together and plot 
ts.plot(do.call(cbind, lapply(split(mydata, 'years'), function(x) { 
    zoo(x, 1:NROW(x)) 
})), col=rainbow(nyears(mydata))) 

另外,

tapply(SPY, format(index(SPY), "%Y"), c) 

将逐年分裂,并且不需要转换为xts

+0

感谢您的回复。实际上,这些日期是(但格式为YYYY-mm-dd),但不是一年中的几天。 – tagoma 2012-03-18 21:46:32

+0

无论如何,我适应了一些你所建议的代码,并且效果很好,除了我更喜欢水平轴上的一年中的几个月,而不是整数达到(大约)250. – tagoma 2012-03-18 21:53:25

+0

我以为你想让水平轴成为一年的长度?如果是这样,你必须改变索引;如果你不改变索引,那么你将有一个长于1年的横轴。 – GSee 2012-03-18 21:55:13