2016-03-02 43 views
1

我有幾個如下所示的數據框。 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 

回答

2

隨着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的帖子中顯示的數據。

1

使用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