如何在R中组合多个不同长度的timesereis数据帧?

时间:2016-05-09 17:09:20

标签: r xts

我有一个非常大的时间序列(xts)数据框变量(> 10),它们具有不同的行数,天数以及开始和结束日期。我想将这些数据帧组合为单个时间序列数据帧。

为清楚起见,我举一个例子;考虑A,B和C时间序列数据帧,分别包含100,200和300行日期,以及一列用于相应的值。

A              Result                B          Result      C               Result
2014-02-01  0.8478517865        2016-03-01  0.794655429     2014-02-01  0.5961746441
2015-03-02  0.8310818302        2016-03-02  0.4288015561    2014-08-03  0.4332428675
2015-04-13  0.6525838461        2016-03-04  0.8032966915    2015-03-01  0.4675749368
2015-04-27  0.0078298878        2016-03-06  0.588762206     2015-03-02  0.6404606516
2015-05-05  0.4810352649        2016-03-08  0.8551481313    2016-03-01  0.403449801
2015-05-06  0.2730398192        2016-03-10  0.7437164122    2016-03-09  0.1844344875
2015-05-07  0.5594211367        2016-03-11  0.1973790985            
2015-05-08  0.1888440552        2016-03-13  0.5973634648            
2015-05-09  0.8211225735                        
2015-05-10  0.2937804316                        
2015-05-11  0.4311328372                        

如何将这三个时间序列数据帧与一列组合为一个具有3列的数据帧?

我曾尝试使用 cbind(A,B)但是它给出了这个错误

  

data.frame(...,check.names = FALSE)中的错误:参数暗示   不同的行数:

还使用 rbind.fill(A,B)尝试此answer,但其附加了时间序列数据框

  

一行A = 100,一列

     

B行= 200,一列

     

在rbind.fill行数300列1之后

被修改

此代码来自此answer

cbind.fill <- function(...){
    nm <- list(...) 
    nm <- lapply(nm, as.matrix)
    n <- max(sapply(nm, nrow)) 
    do.call(cbind, lapply(nm, function (x) 
        rbind(x, matrix(, n-nrow(x), ncol(x))))) 
}

这个函数结合了两个xts数据帧,但它确实正确地将数据与日期对齐

comb-cbind.fill(A,B)
head(comb)
1998-01-02 "0.332" "0.849"
1998-01-05 "0.227" "0.060"
1998-01-06 "0.394" "0.071"
1998-01-07 "0.422" "6.066"
tail(comb)
 NA    "0.306"
 NA    "0.479"
 NA    "0.127"
 NA    "0.321"

2 个答案:

答案 0 :(得分:1)

约书亚建议我为我的问题编写解决方案。

问题在于我的一个代码本身将我的时间序列转换为数据框。我使用is.data.frame()

调试了问题
is.data.frame(A)
TRUE

删除导致问题的功能解决了错误,然后我使用cbind(A,B)

组合了不同长度的时间序列

答案 1 :(得分:0)

可能我们可以使用merge。由于时间列用作合并索引,因此:

merge(A,B, all = TRUE, by.x = "A", by.y = "B")

如果A $ A列(100)中的所有日期都是B $ B列(200)的成员,那么您将获得200行3列(1个日期和2个数据)。我假设日期存储在一个单独的列中。