我有几个数据框如下所示。 1
,2
,3
列是n
以后的预测数量Date
天。
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
答案 0 :(得分:2)
使用data.table
,我们使用rbindlist
,然后通过循环遍历列,将NAs
与na.omit
一起省略,按照'日期'列。
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 :(得分:1)
使用dplyr和reshape2,我们可以将每个数据帧重新整形为长格式,删除NA,将它们堆叠在一起,而不是回到宽格式:
> 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