如何在R中组合多个不同长度的时间序列数据框?

问题描述 投票:0回答:2

我有一个非常大的时间序列(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) 但其附加了时间序列数据框架

A=100的一行一列

B=200的行,有一列

rbind.fill之后的行数 300 列 1

已编辑

这个代码是由这个 回答.

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"
r xts
2个回答
1
投票

正如Joshua所建议的那样,我将为我的问题写出解决方案。

问题是我的代码本身的一个转换我的时间序列到一个数据帧。我调试了这个问题,通过使用 is.data.frame()

is.data.frame(A)
TRUE

移除引起问题的函数,解决了错误,然后我将不同长度的时间序列用 cbind(A,B)


0
投票

也许我们可以使用 merge. 由于时间列被用作合并索引,那么。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.