按日期列合并或组合(对角线)数据帧

问题描述:

我有几个如下所示的数据框。 1,2,3列是来自Date的未来预测数量n天。按日期列合并或组合(对角线)数据帧

Date   1  2  3 
2016-02-02  100 NA NA 
2016-02-03  NA 55 NA 
2016-02-04  NA NA 75   

Date   1  2  3 
2016-02-03  105 NA NA 
2016-02-04  NA 45 NA 
2016-02-05  NA NA 70 

Date   1  2  3 
2016-02-04  110 NA NA 
2016-02-05  NA 40 NA 
2016-02-06  NA NA 72 

如何合并这些数据帧所以造成DF是这样的?:

Date   1  2  3 
2016-02-02  100 NA NA 
2016-02-03  105 55 NA 
2016-02-04  110 45 75 
2016-02-05  NA 40 70 
2016-02-06  NA NA 72 

随着data.table,我们使用rbindlist,然后用省略NAs通过循环遍历由'日期'列分组的列。

library(data.table) 
rbindlist(list(df1, df2, df3))[,lapply(.SD, na.omit), Date] 
#   Date X1 X2 X3 
# 1: 2016-02-02 100 NA NA 
# 2: 2016-02-03 105 55 NA 
# 3: 2016-02-04 110 45 75 
# 4: 2016-02-05 NA 40 70 
# 5: 2016-02-06 NA NA 72 

如果在“日期”重复的非NA元素rbindlist步骤之后,我们可以做的值的平均值。

rbindlist(list(df1, df2, df3))[,lapply(.SD, mean, na.rm=TRUE), Date] 

注意:'df1','df2','df3'是在OP的帖子中显示的数据。

使用dplyr和reshape2,我们可以重塑每个数据帧长格式,放下来港,堆他们在一起,不是回到宽幅:

> list(df1,df2,df3) %>% lapply(melt, "Date", na.rm=TRUE) %>% rbind_all() %>% dcast(Date~variable) 
     Date v1 v2 v3 
1 2016-02-02 100 NA NA 
2 2016-02-03 105 55 NA 
3 2016-02-04 110 45 75 
4 2016-02-05 NA 40 70 
5 2016-02-06 NA NA 72