Підмножина векторів часових рядів


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.