结合两个动物园时间序列

时间:2017-05-15 15:14:03

标签: r merge time-series

我有两个绝对的动物园时间序列(一个人的日期在另一个完成后开始),他们有以下形式(但更长时间而且不仅仅是NA值):

一个:

1979-01-01 1979-01-02 1979-01-03 1979-01-04 1979-01-05 1979-01-06 1979-01-07 1979-01-08 1979-01-09 
    NA         NA         NA         NA         NA         NA         NA         NA         NA 

B:

1988-08-15 1988-08-16 1988-08-17 1988-08-18 1988-08-19 1988-08-20 1988-08-21 1988-08-22 1988-08-23 1988-08-24 1988-08-25 
    NA         NA         NA         NA         NA         NA         NA         NA         NA         NA         NA 

我想要做的就是将它们作为ZOO对象一次性组合,这似乎是一项基本任务,但我做错了。我使用函数“merge”:

combined <- merge(a, b)

但结果是形式:

             a   b
1980-03-10  NA   NA
1980-03-11  NA   NA
1980-03-12  NA   NA
1980-03-13  NA   NA
1980-03-14  NA   NA
1980-03-15  NA   NA
1980-03-16  NA   NA
.
.

这不是时间序列,长度不合适:

> length(a)
[1] 10957
> length(b)
[1] 2557
> length(combined)
[1] 27028

我怎样才能将它们组合成一个原始形式的时间序列?

1 个答案:

答案 0 :(得分:0)

假设最后在Note中可重复显示的系列,合并两个系列的结果有20次和2列(每个系列一个)。单个系列的长度为9和11个元素,合并的系列是动物园对象,9 + 11 = 20行(因为没有交叉时间)和2列(每个输入一个)和长度40(= 20 * 2) 。请注意,多变量系列的长度是其中的元素数,而不是时间点的数量。

length(z1)
## [1] 9
length(z2)
## [1] 11

m <- merge(z1, z2)

class(m)
## [1] "zoo"

dim(m)
## [1] 20  2

nrow(m)
## [1] 20

length(index(m))
## [1] 20

length(m)
## [1] 40

如果你想要的是将它们一个接一个地串起来,那么使用c

length(c(z1, z2))
## [1] 20

以上内容与mergeclength在基地R中的工作方式一致。

注意:

library(zoo)

z1 <- zoo(rep(NA, 9), as.Date(c("1979-01-01", "1979-01-02", "1979-01-03", 
"1979-01-04", "1979-01-05", "1979-01-06", "1979-01-07", "1979-01-08", 
 "1979-01-09")))

z2 <- zoo(rep(NA, 11), as.Date(c("1988-08-15", "1988-08-16", "1988-08-17",
"1988-08-18", "1988-08-19", "1988-08-20", "1988-08-21", "1988-08-22", 
"1988-08-23", "1988-08-24", "1988-08-25")))