Подмножество R векторов временных рядов


25

У меня есть временной ряд, и я хочу его поднастроить, сохранив его как временной ряд, сохранив начало, конец и частоту.

Например, допустим, у меня есть временной ряд:

> qs <- ts(101:110, start=c(2009, 2), frequency=4)
> qs
     Qtr1 Qtr2 Qtr3 Qtr4
2009       101  102  103
2010  104  105  106  107
2011  108  109  110     

Теперь я сделаю это:

> qs[time(qs) >= 2010 & time(qs) < 2011]
[1] 104 105 106 107

Обратите внимание, что я получил правильные результаты, но я потерял «обертки» из временного ряда (а именно начало, конец, частота).

Я ищу функцию для этого. Не является ли подмножество временных рядов распространенным сценарием? Так как я еще не нашел, вот функция, которую я написал:

subset.ts <- function(data, start, end) {
  ks <- which(time(data) >= start & time(data) < end)
  vec <- data[ks]
  ts(vec, start=start(data) + c(0, ks[1] - 1), frequency=frequency(data))
}

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

Ответы:


34

Используйте windowфункцию:

> window(qs, 2010, c(2010, 4))
     Qtr1 Qtr2 Qtr3 Qtr4
2010  104  105  106  107

2
Также обратите внимание, что окно (qs, 2010, c (2010, 4)) <- 3 соответственно изменит q.
mpiktas

6

Также полезно, если вы объединяете несколько временных рядов и не хотите, чтобы windowкаждый из них соответствовал им, ts.unionи ts.intersect.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.