R ts对象 - 删除NA时保留索引

时间:2016-07-08 18:04:44

标签: r statistics time-series

考虑具有多个NA值的时间序列对象:

x <- seq(10)
x[seq(2,10,2)] <- NA
x <- ts(x)

这是默认索引:

index(x)
[1]  1  2  3  4  5  6  7  8  9 10

如果我使用NA删除na.exclude值,我会得到一个新索引:

na.exclude(x)
[1] 1 3 5 7 9
attr(,"na.action")
[1]  2  4  6  8 10
attr(,"class")
[1] "exclude"    
index(na.exclude(x))
[1] 1 2 3 4 5

如果我尝试na.omit,我只会收到错误:

na.omit(x)
Error in na.omit.ts(x) : time series contains internal NAs
> index(na.omit(x))
Error in na.omit.ts(x) : time series contains internal NAs

如果我尝试将index设置为我需要的值(我希望它应该是删除NA s的自然结果),我会收到另一个错误:

index(x) <- c(1,3,5,7,9)
Error in UseMethod("index<-") : no applicable method for 'index<-' 
applied to an object of class "ts"

是否有直接的方法可以删除NA值,同时保留非NA s的原始索引?我不想使用xts, zoo等,因为包stats中的某些函数只接受ts个对象。

感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用na.remove包中的tseries执行此操作(这也将保留ts类):

x <- seq(10)
x[seq(2,10,2)] <- NA
x <- ts(x)

然后:

library(tseries)
na.remove(x)
#Time Series:
#Start = 1 
#End = 9 
#Frequency = 0.5 
#[1] 1 3 5 7 9
#attr(,"na.removed")
#[1]  2  4  6  8 10

index(na.remove(x))
#[1] 1 3 5 7 9

ts类保持原样:

class(x)
#[1] "ts"
class(na.remove(x))
#[1] "ts"