我想选择时间序列的最后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)
为什么[
运算符不返回时间序列对象?
答案 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)
会做你想做的事。