我有一个非常大的时间序列(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"
答案 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个数据)。我假设日期存储在一个单独的列中。