如何命名时间序列对象中的列?

Anu*_*sha 11 r time-series

我在这里有点困惑,必须遗漏一些非常基本的东西.我想从多个时间序列对象中提取列.也许可以通过将ts对象放入数据帧然后提取它们来完成它,但是有一种直接的方法可以对此问题链接中给出的时间序列进行子集化

为了弄清楚如何为ts对象分配名称,?ts显示

ts(data = NA, start = 1, end = numeric(), frequency = 1,
   deltat = 1, ts.eps = getOption("ts.eps"), class = , names = )
Run Code Online (Sandbox Code Playgroud)

但是在运行?ts help中的代码时,有或没有names参数给出 names(z)NULL.

z <- ts(matrix(rnorm(300), 100, 3), start=c(1961, 1), frequency=12) 要么 z <- ts(matrix(rnorm(300), 100, 3), start=c(1961, 1), frequency=12, names=c("x1", "x2", "x3"))

主要问题:1.如何为时间序列对象ts和mts中的列分配名称?2.直接从时间序列对象中提取列的方法和时间索引有哪些?是否有必要将其转换为zoo或xts类?或单独添加时间索引?

想要解决我想要解决的问题:

# using inbuilt ldeaths time series dataset
ldeaths
d <- diff(ldeaths)
percen <- quantile(d, 0.9)
i <- ifelse(d>percen, 1,0)
signal <- cbind(d,i) 
Run Code Online (Sandbox Code Playgroud)

现在要使用时间索引提取指标为1的数据集,我不知道如何继续.str(信号)是一个mts对象,但打印信号没有显示时间索引.

非常感谢.

Rei*_*son 14

提取"mts"对象中的系列名称

你想要colnames():

> colnames(z)
[1] "x1" "x2" "x3"
Run Code Online (Sandbox Code Playgroud)

这是因为z实际上是一个具有额外属性和矩阵的矩阵,names但它们确实具有colnames.

分配/更改"mts"对象中的系列名称

colnames在事后分配或更改它们,请使用替换功能'colnames<-'

> colnames(z) <- paste0("a", 1:3)
> colnames(z)
[1] "a1" "a2" "a3"
Run Code Online (Sandbox Code Playgroud)

"mts"对象中提取特定系列

作为提取列,[工作只是罚款"ts""mts"对象.例如:

> z[,1]
             Jan         Feb         Mar         Apr         May
1961  0.81800833 -0.30852155  0.05915071  0.14937058  0.67734362
1962  1.12993606 -0.81176485 -0.51903387  1.12527537 -0.34377553
1963  1.30469813  0.32486340  0.01029512 -1.13631688 -1.22013150
1964  0.72449621 -0.88704234  0.78834391 -0.92956537 -0.31584252
1965  0.24610412  0.97980266  0.17136276  2.45216318  0.15846038
1966 -0.48891587 -0.62820331  0.33190472  2.14094813  1.32389152
1967  0.49120472 -0.10149521 -0.39070688 -0.78743955 -1.20563040
1968 -0.70749150  0.52333087 -0.51991721  0.02037504 -0.59848254
1969 -0.80156968 -1.38172513  0.09400527  0.66966443            
....
Run Code Online (Sandbox Code Playgroud)

OP问题的胆量

最后一点,我不确定你希望得到什么.A "ts""mts"对象是常规时间序列,并signal[, "d"]在向量中提取结果位而不是时间序列.

> signal[signal[,2] == 1, 1]
[1]  761 1104  810  653  522  956  593
Run Code Online (Sandbox Code Playgroud)

没有任何时间指数,因为这不再是一个"ts"对象.如果你想这样做,动物园包可能是你想要的方式.这是一个例子,我们使用转换为zoo对象as.zoo()

require(zoo)
sz <- as.zoo(signal)
Run Code Online (Sandbox Code Playgroud)

然后我们可以提取我们想要的观察结果(其中的名称是时间指数的有用指标)

> sz[sz[, "i"] == 1, "d"]
1975(12)  1976(2) 1976(12) 1977(12)  1978(1) 1978(12)  1979(1) 
     761     1104      810      653      522      956      593 
Run Code Online (Sandbox Code Playgroud)

然后是一个类似的子集调用,但使用它index()来返回整个zoo对象的时间索引,然后选择我们想要的位

> index(sz)[sz[, "i"] == 1]
[1] 1975.917 1976.083 1976.917 1977.917 1978.000 1978.917
[7] 1979.000
Run Code Online (Sandbox Code Playgroud)