【发布时间】:2016-09-04 10:23:39
【问题描述】:
我有一个非常大的时间序列 (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"
【问题讨论】:
-
你不能有一个列长度不同的数据框,
-
在这种情况下您可能需要使用列表
-
你说你有几个“xts 数据框变量”。那是不可能的。它们必须是 xts 对象或 data.frame 对象。 xts 对象是具有索引属性的矩阵;它们不能是 data.frame。如果你真的有 3 个 xts 对象,答案很简单:
merge(A, B, C)。 -
@JoshuaUlrich 抱歉,因为英语不是我的第一语言,所以造成任何混淆。当您在 quantmod 中工作时,我将给出我的 variables
A<-Cl(aapl), B<-Cl(goog), C<-Cl(f), D..的类似示例 -
您不应将解决方案编辑到您的问题中(我已将其删除)。您可以回答自己的问题并将其标记为已接受。