2016-08-12 13 views
0

4つ以上のcsvファイルがあり、それらをマージして出力したいとします。Rで異なるサイズのデータ​​フレームをマージする

私はそうのようなファイルを開く:

df1 <- read.csv("file1", sep ='\t') 
df2 <- read.csv("file2", sep ='\t') 
df3 <- read.csv("file3", sep ='\t') 
df4 <- read.csv("file4", sep ='\t') 

キャッチは、すべてのファイルが別の行と列の両方の番号なし、同じ列名を持つことです。私の教授はそれらをマージすると言ったので、出力はこのようなものになると期待しています

file1.column11 ... file1.column1N file2.column21 ... file2.column2N ... 
value11 ... value1N NA ... NA 
. 
. 
. 
NA ... NA value21 ... value2N 

どういうことができますか?私はjoin_all、)(マージ()や他のものを使用してきた、と私は

私はまた、一般的にはR.

+0

有用である可能性がある。この前のスレッドを見てみましょう。http://stackoverflow.com/questions/6988184/combining-two-data-frames-of-different-lengths – jtclaypool

答えて

0

に非常に新しいです...これの底に取得カントがあり、さまざまなコンテンツとデータフレームをマージする特別な方法はありません。

データセットをどのようにマージするかを検討する必要があります。考えられる点:

  • データセットのいずれの列にも同じ種類のものがあります(列名が異なる場合でも)。
  • 保存/破棄するデータのビットはどれですか?
  • すべてのデータセットに共通するデータのビットはどれですか?
  • 他の列にはどのような関係がありますか?任意の列間に1対1または1対多の関係がありますか?
1

正しいですか:同じ列名がありませんか?はいの場合は、1つの列がある場合にのみ、それらをマージすることができます。たとえば、1つの列がある場合、その値がマージされます。たとえば、年の列またはサブジェクトIDなどがあります。 あなたは次のファイルを接続します: file.overall < - merge(file1、file2、by = "common_column_name") file.overall2 < - merge(file.overall、file2、by = "common_column_name") すべてのファイルを順番に追加します。

あなたは列の名前が異なる場合は、単に事前の列の名前を変更します。 名(FILE1)< - C(「file1.coulmn1_name」、...)

一方、あなたがしたい場合前のメッセージで示唆したように、すべての列が同じ名前でなければならず、rbindオペランドを使用することができます。

希望すると、 ハッピーコーディング!

0

すべてのデータフレームが異なる行名を持っている場合は、次の方法でそれらをマージすることができます:

merge(df1, df2, by="row.names", all.x=T, all.y=T) 

そうでない場合、あなたはplyrがインストールされている場合、あなたはそれがすべての空を記入します(次の操作を行うことができNASとの細胞):

library(plyr) 
rbind.fill(df1, df2) 
関連する問題