2016-03-23 9 views
1

私は周りを見回していて、特定の質問に対する解決策を見つけることができません。私は本当に助けていただければ幸いです。複数のデータフレームをマージして重複する列を合計する

私はcsvファイルのリストを持っています。これらのファイルにはすべて、種名を含む列があります(下の例では「行」と表記されています)。各csvファイルにもサンプルの範囲があり、そのいくつかはすべてのcsvファイルで一意であり、いくつかはいくつかのcsvファイルにあります。私は、複数のcsvファイルに現れるすべてのサンプルを合計しながら、これらのcsvファイルをすべて「行」変数にマージする方法を探しています。例として

dfrm_1 <- data.frame(a = c("species1", "species2", "species3", "species9"), b= c(100,5,24,100), c=c(52,151,15,100)) 
dfrm_2 <- data.frame(a = c("species2", "species4", "species6", "species9"), b= c(4,2,500,100), c=c(67,98,153,100)) 
names(dfrm_1) <- c("Row", "S1", "S2") 
names(dfrm_2) <- c("Row", "S2", "S4") 

mDF <- merge(dfrm_1, dfrm_2, by="Row", all=TRUE) 

2つのデータフレームがマージされるとき、サンプル2(両方のデータフレーム内に存在するS2は、)S2.xとS2.y.なります文字の接尾辞を追加するマージ関数の代わりに、私は2つの列を合計するだけです。

所望の出力は次のようになります。

df_merge <- data.frame(a=c("species1", "species2", "species3", "species9", "species4", "species6"), b=c(100,5,24,100,0,0), c=c(52,155,15,200,2,500), d=c(0,67,0,100,98,153)) 
names(df_merge) <- c("Row", "S1", "S2", "S4") 

注:例を拡大すると、あなたが近くにいる所望の出力

答えて

1

を含めるように編集されたが、しかし、代わりにデータをマージするのは、データを追加します。以下のコードはあなたが望むものを得るでしょう。

library(dplyr) 
rbind_list(dfrm_1, dfrm_2) %>% 
    group_by(Row) %>% 
    mutate_each(funs(sum(., na.rm = TRUE))) %>% 
    unique() 
+0

わかりにくいことをお詫び申し上げます。希望の出力を提供するために私のオリジナルの質問を編集しました。ここにあるコードは非常に近いですが、一般的な種が複数ある展開された例で試してみると、それらをすべて正確に集計することはできません。たとえば、上記の更新されたサンプルコードでは、species2は合計155に正しく集計されますが、species9は200になるはずです。 – EpiBlake

+0

@EpiBlake、良い点、私は自分の答えを編集しました。今それは動作します –

関連する問題