Выбор последних n элементов во временном ряду - PullRequest
7 голосов
/ 11 октября 2011

Я хочу выбрать последние n элементов временного ряда. Я могу использовать оператор [, но я теряю атрибуты временных рядов данных:

data <- ts(1:10, frequency = 4, start = c(1959, 2))
data[(length(data)-4):length(data)] 

Я написал функцию-обертку для повторного применения атрибутов временных рядов, но мне было интересно, есть ли более элегантный способ сделать это?

lastN <- function(data,n) {
    out <- data[(length(data)-n+1):length(data)] 
    ts(out, end=end(data), frequency=frequency(data))
}
data
lastN(data,5)

Почему оператор [ не возвращает объект временного ряда?

Ответы [ 2 ]

7 голосов
/ 12 октября 2011

[ не возвращает объект ts, потому что, например, data[c(1,5,6)] не будет работать. Вместо этого есть функция window():

window(data,start=tsp(data)[2]-4/frequency(data))

Таким образом, модификация вашей функции lastN будет

tail.ts <- function(data,n) {
  data <- as.ts(data)
  window(data,start=tsp(data)[2]-(n-1)/frequency(data))
}

Тогда tail(data,5) будет делать то, что вы хотите.

7 голосов
/ 11 октября 2011

Я подозреваю, что это не то, что вы ищете, но вы можете использовать обычный синтаксис извлечения ([) с zoo объектами:

library(zoo)
data_zoo <- as.zoo(data)
last_zoo <- data_zoo[(length(data_zoo)-4):length(data_zoo)]

Затем, если хотите, конвертируйте обратно в ts объект:

as.ts(last_zoo)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...