2016-03-02 2 views
1

У меня есть несколько фреймов данных, которые выглядят следующим образом. Графики 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 

ответ

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 

Если есть повторяющиеся элементы, не НС в «Дата» после rbindlist шага, мы могли бы сделать в среднем значения.

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

Примечание: 'df1', 'df2', 'DF3' являются данные показали в пост ФП в.

1

Использование dplyr и reshape2, мы можем изменить каждый кадр данных длинный формат, падение Nas, стек их вместе, чем вернуться в широкоэкранном формате:

> 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 
Смежные вопросы