【问题标题】:Join time series in R在 R 中加入时间序列
【发布时间】:2021-06-12 04:04:46
【问题描述】:

我想通过扩展已经存在的时间序列来创建一个每月间隔的时间序列。

我有“t1”时间序列: 结构(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", "矩阵"))

我想扩展上述系列以包括每月观察。我该怎么做?

【问题讨论】:

  • @akrun 我认为这不是重复的,“t1”时间序列与我想获得的时间序列长度不同
  • 您可以使用NA 创建第二个“t2”数据集,即t2 <- ts(rep(NA, 20), start = c(2021, 03), freq = 1),然后使用该帖子中的代码,即使用ts.union
  • @akrun 不起作用,错误:时间序列有不同的频率
  • 您的频率显示它是 1,这就是为什么我创建了相同的频率 1。请使用dput 显示示例,以便我们可以正确获得结构

标签: r join merge time-series


【解决方案1】:

问题中的对象是一种奇怪的形式。它由 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"))

【讨论】:

    猜你喜欢
    • 2014-01-28
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2016-08-12
    • 2011-12-09
    相关资源
    最近更新 更多