是否可以将两个时间序列合并为一个?

11

我一直在尝试合并两个ts对象,第二个对象恰好在下一个周期之后开始。 例如,取以下两个时间序列:

ts1<-ts(c(1:12),star=c(2014,1),freq=12)
ts2<-ts(c(13:24),star=c(2015,1),freq=12)

正如您所看到的,它们两者完美地匹配在一起,以使这两个ts对象成为一个单独的ts。我认为逻辑答案将是rbind()函数。但是它会将它们变成矩阵,如下所示...

> rbind(ts1,ts2)
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
ts1    1    2    3    4    5    6    7    8    9    10    11    12
ts2   13   14   15   16   17   18   19   20   21    22    23    24

我尝试了合并(merge)和列合并(cbind)等其他函数,但都没有成功。使用c()函数,我已经成功地获得了一个时间序列,主要问题在于我失去了原始时间序列的结构属性,这很糟糕,因为我正在尝试使用函数forecast来预测新的时间序列,但它给了我这个:

Error: variables ... were specified with different types from the fit

我希望只需将额外的观测值添加到时间序列中就能感到满足。例如,为2015年1月在ts1中添加价值13,但我也没找到如何做到这一点。

我认为这很有趣,因为我认为这是向ts对象提出的一个完全自然的要求,但我没有找到任何其他问题可以帮助我解决这个问题。希望这不是一个太愚蠢的问题。

4个回答

9
你需要重新分配第一系列的属性。
> ts(c(ts1,ts2), start=start(ts1), frequency=frequency(ts1))
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2014   1   2   3   4   5   6   7   8   9  10  11  12
2015  13  14  15  16  17  18  19  20  21  22  23  24

谢谢!如果你问我,我会发誓我试过那个一千次了。 - fake22
我曾尝试使用attributes<-将ts1的属性赋值给c(ts1,ts2)的结果,但失败了。 - IRTFM
请原谅我的无知,您如何将属性传递给ts?更具体地说,为什么这次失败了? - fake22
2
如果您只使用xts方法,可能更有益于您的心理健康。 - IRTFM

7
我认为你正在寻找类似于以下内容的东西:
comb <- ts.union(ts1, ts2)
pmin(comb[,1], comb[,2], na.rm = TRUE)
#     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
#2014   1   2   3   4   5   6   7   8   9  10  11  12
#2015  13  14  15  16  17  18  19  20  21  22  23  24

我已经尝试过这个了,与使用cbind()的结果相同。它将一个时间序列放在另一个时间序列旁边,并用NA填充每个时间序列中缺失的值。 - fake22
@fake22 哦,你可以使用 pminpmax。我已经编辑了我的帖子。 - Anders Ellern Bilgrau
不知道那些函数,这太棒了!谢谢! - fake22

3

这个对我有用

ts.union(ts1, ts2)
             ts1 ts2
    Jan 2014   1  NA
    Feb 2014   2  NA
    Mar 2014   3  NA
    Apr 2014   4  NA
    May 2014   5  NA
    Jun 2014   6  NA
    Jul 2014   7  NA
    Aug 2014   8  NA
    Sep 2014   9  NA
    Oct 2014  10  NA
    Nov 2014  11  NA
    Dec 2014  12  NA
    Jan 2015  NA  13
    Feb 2015  NA  14
    Mar 2015  NA  15
    Apr 2015  NA  16
    May 2015  NA  17
    Jun 2015  NA  18
    Jul 2015  NA  19
    Aug 2015  NA  20
    Sep 2015  NA  21
    Oct 2015  NA  22
    Nov 2015  NA  23
    Dec 2015  NA  24

2
您可以使用xts软件包,它将为您处理细节(例如,即使系列之间存在间隔)。
library(xts)
ts1<-as.xts(ts(c(1:12),star=c(2014,1),freq=12))
ts2<-as.xts(ts(c(13:24),star=c(2015,1),freq=12))
str(ts3 <- c(ts1, ts2))
# An ‘xts’ object on Jan 2014/Dec 2015 containing:
# Data: int [1:24, 1] 1 2 3 4 5 6 7 8 9 10 ...
# Indexed by objects of class: [yearmon] TZ: 
# xts Attributes:
# NULL

你好,Peter


我也会尝试这个。谢谢! - fake22

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接