考虑具有多个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
个对象。
感谢。
答案 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"