2017-11-11 15 views
1

Timeに基づいて3つのファイルすべてを結合したいと思います。データフレームにその特定の日付の値がない場合は、NAを追加します。合計で、出力には7つの列が必要です。日付に基づいて複数のデータフレームを結合する

> head(Dax1,3) 
     Time  Res  Accum 
1 2017-10-20 1174.60 172278.21 
2 2017-10-18 -109.41 171103.61 
3 2017-08-28 -2670.84 171213.02 
> head(Dax2,3) 
     Time  Res  Accum 
1 2017-10-23 1473.25 185076.53 
2 2017-08-24 1001.50 183603.28 
3 2017-07-31 -144.96 182601.79 
> head(Dax3,3) 
     Time  Res  Accum 
1 2017-11-07 -348.37 189 023.90 
2 2017-10-26 398.16 189 372.27 
3 2017-10-25 -80.19 188 974.10 

私はjoin_allを試してみましたが、それは長い形式でJON彼らに思えます。

> join_all(list, by = "Time",match = "all",type="full") 
     Time  Res  Accum 
1 2017-10-20 1174.60 172278.21 
2 2017-10-18 -109.41 171103.61 
3 2017-08-28 -2670.84 171213.02 
4 2017-10-23 1473.25 185076.53 
5 2017-08-24 1001.50 183603.28 
6 2017-07-31 -144.96 182601.79 
7 2017-11-07 -348.37 189 023.90 
8 2017-10-26 398.16 189 372.27 
9 2017-10-25 -80.19 188 974.10 
+1

'rbind(DAX1、から機能の一部を使用して鎖で行うことができますDax2、Dax3) 'あなたは後でリゾートに行きたいかもしれない – G5W

+1

@ G5W Probaby' cbind'はあなたが意味していた? – akrun

+0

cbindは3つの出力行を作成します。入力にはよりユニークな日付があります。 – user2300940

答えて

1

私たちは、「時間」欄以外listにデータセットの列の名前を変更し、join_all

res1 <- plyr::join_all(Map(function(x,y) { 
     names(x)[-1] <- paste0(names(x)[-1], y) 
     x}, lst, seq_along(lst)), by = "Time",match = "all",type="full") 

を適用することができます:私は彼らがサイドバイサイド合計7列としてしたいです

それともこれはtidyverse

library(purrr) 
library(dplyr) 
res2 <- lst %>% 
      map2(., seq_along(.), ~setNames(.x, c('Time', paste0(names(.x)[-1], .y)))) %>% 
      plyr::join_all(., by = 'Time', match = 'all', type = 'full') 

identical(res1, res2) 
#[1] TRUE 
関連する問題