按日期列合并或组合(对角线)数据帧
问题描述:
我有几个如下所示的数据框。 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