gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:57:21 24 4
gpt4 key购买 nike

我在这里有点困惑,一定是缺少一些非常基本的东西。
我想从多个时间序列对象中提取列。也许可以通过将 ts 对象变成数据帧然后提取它们来完成,但是有一种直接的方法来对时间序列进行子集设置,如本问题 link 中给出的

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

ts(data = NA, start = 1, end = numeric(), frequency = 1,
deltat = 1, ts.eps = getOption("ts.eps"), class = , names = )

但是在 ?ts 帮助中运行代码时,无论是否带有 names 参数都会给出 names(z) 空。
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)

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

非常感谢。

最佳答案

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

你想要 colnames() :

> colnames(z)
[1] "x1" "x2" "x3"

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

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

要在事后分配 colnames 或更改它们,请使用替换函数 'colnames<-'
> colnames(z) <- paste0("a", 1:3)
> colnames(z)
[1] "a1" "a2" "a3"

"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
....

OP 问题的根源

最后一点,我不确定你希望得到什么。 "ts""mts" 对象是常规时间序列,提取 signal[, "d"] 的位会导致向量而不是时间序列。
> signal[signal[,2] == 1, 1]
[1] 761 1104 810 653 522 956 593

没有任何时间索引,因为这不再是 "ts" 对象。如果你想这样做, zoo 包可能是你想要的方式。这是一个示例,我们使用 as.zoo() 转换为 zoo 对象
require(zoo)
sz <- as.zoo(signal)

然后我们可以提取我们想要的观察结果(名称是时间索引的有用指标)
> 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

然后一个类似的子集调用,但使用 index() 返回整个动物园对象的时间索引,然后选择我们想要的位
> index(sz)[sz[, "i"] == 1]
[1] 1975.917 1976.083 1976.917 1977.917 1978.000 1978.917
[7] 1979.000

关于r - 如何命名时间序列对象中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com