2012-03-18 3 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

спасибо за ваш ответ. Фактически, это даты, но (отформатированные в ГГГГ-мм-дд), но не дни года. – tagoma

+0

В любом случае, я немного адаптировал код, который вы предложили, и это работает хорошо, за исключением того, что я предпочел бы месяцы года на горизонтальной оси вместо целых чисел (около) 250. – tagoma

+0

Я думал, что вы хотите, чтобы горизонтальная ось была продолжительность одного года? Если это так, вам нужно изменить индекс; если вы не измените индекс, тогда у вас будет горизонтальная ось, длина которой превышает 1 год. – GSee