我有一个非常大的时间序列(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"
正如Joshua所建议的那样,我将为我的问题写出解决方案。
问题是我的代码本身的一个转换我的时间序列到一个数据帧。我调试了这个问题,通过使用 is.data.frame()
is.data.frame(A)
TRUE
移除引起问题的函数,解决了错误,然后我将不同长度的时间序列用 cbind(A,B)
也许我们可以使用 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个数据)。