r - 在 R 中加入时间序列
问题描述
我想通过扩展已经存在的时间序列来创建一个每月间隔的时间序列。
我有“t1”时间序列:structure(c(49.25, 49.25, 30, 99.25, 99.25, 100.5, 101, 91.25), .Dim = c(1L, 8L), .Dimnames = list(NULL, c("2021 -03-31”、“2022-03-31”、“2022-05-31”、“2022-09-30”、“2022-12-31”、“2023-03-31”、“2023-05” -31", "2023-09-30")), .Tsp = c(1, 1, 1), class = c("mts", "ts", "matrix"))
我想扩展上述系列以包括每月观察。我怎样才能做到这一点?
解决方案
问题中的对象是一种奇怪的形式。它由 9 个独立的时间序列组成,列名由字符日期给出。首先将字符日期和值提取到具有 yearmon 时间类的 zoo 对象中——yearmon 直接表示没有日的年月。确保它的频率为 12 并将其转换为 ts 类,这将具有填补缺失月份的效果。最后将其延长到所需的日期。
library(zoo)
z <- zoo(t1[-1], as.yearmon(colnames(t1)[-1]), frequency = 12)
tt <- window(as.ts(z), end = c(2024, 11), extend = TRUE)
tt
给这个 ts 对象:
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2021 49.25 NA NA NA NA NA NA NA NA NA
2022 NA NA 49.25 NA 30.00 NA NA NA 99.25 NA NA 99.25
2023 NA NA 100.50 NA 101.00 NA NA NA 91.25 NA NA NA
2024 NA NA NA NA NA NA NA NA NA NA NA
请注意,您可以使用View(as.zoo(tt))
查看 tt 并可以使用na.approx(tt, na.rm = FALSE, rule = 2)
内插值填充内部 NA,并使用最后一个非 NA 值填充尾随 NA。
笔记
输入在问题中显示为:
t1 <- structure(c(49.25, 49.25, 30, 99.25, 99.25, 100.5, 101, 91.25), .Dim = c(1L, 8L), .Dimnames = list(NULL, c("2021-03-31", "2022-03-31", "2022-05-31", "2022-09-30", "2022-12-31", "2023-03-31", "2023-05-31", "2023-09-30")), .Tsp = c(1, 1, 1), class = c("mts", "ts", "matrix"))
推荐阅读
- moqui - POPC 采购订单流程
- python - 如何从 python 中的 JSON 字典中删除额外的统计平均结果?
- scrapy - 从亚马逊上删除超过 5,000 条评论
- haskell - 如何使用索引单子作为 FSM?
- html - 网页抓取后表数据返回空值
- c - 如何返回“您已登录!” 知道密码但不知道用户 ID?
- ruby-on-rails - 如何获取通过特定频道订阅的模型的 ID
- python - 遍历 Pandas 组以创建 DataFrame
- r - 如何查找包含字符的列的百分比
- mysql - 从 Google AppEngine Standard 连接到 Google Cloud SQL 实例时出错(使用 NodeJS)