选择时间序列中的最后n个项目

时间:2011-10-11 18:26:20

标签: r time-series subset

我想选择时间序列的最后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 个答案:

答案 0 :(得分:7)

我怀疑这不是你想要的,但你可以使用[对象的常用提取(zoo)语法:

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

然后,如果您愿意,请转换回ts对象:

as.ts(last_zoo)

答案 1 :(得分:7)

[不会返回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)会做你想做的事。