2017-12-13 11 views
0

検索してみると、同じ問題が見つかりましたが、同じ問題は見つかりませんでした。これは多少一般的なはずなので、おそらくちょうどそれが欠けているようです。異なる機能セットを持つ複数のデータフレームをマージする

私は複数のCSVファイルを持っていますが、私はread.tableで読み込んでいます。私は同じID列を持つ行が一緒にcbind()され、残りは空白のままになるように、これらを一緒にマージしたいと思います。以下の例は、おそらくより良い

ファイル1

UserID val1  val2  
    1     2 
    2  1   3 

ファイル2

UserID col1 
    1   a 
    3   z 

ファイル3

UserID feat1 feat2 
    1  Hi  Hello 
    3  Moshi Moshi 

望ましい結果

UserID  val1  val2 col1  feat1 feat2 
1      2  a  Hi  Hello 
2   1   3 
3        z  Moshi Moshi 
を示しています210

欠損値のためにゼロを追加したくありません。可能であれば、NAsで何かを埋めることを望んでいません。

私は、UserID列でデータセット(すべての場合で3+、平均10)を結合し、他のすべてを同じにしたいだけです。

私は確かにこれのためのツールがあります、私はそれを見つけることができません。

+0

私が考えることができる最も簡単な方法は次のとおりです: 'df [is.na(df)] = ''' これは、すべての「NA」値がデータセット内で同じものとして扱われることを前提としています。そうでなければ、各データフレームが情報を失わないように異なる「NA」をコードする必要があります。 – bringtheheat

+0

これを行う正しい方法は、一致しない位置に「NA」という結果になります。これが正しい値です。他のものが必要な場合は、それらを置き換えるための第2のステップが必要です。しかし、文字列と数値列が混在している場合は、すべて同じ値に置き換える必要があるのは無意味です。だからあなたはNAを守る方が良いです。 – joran

答えて

-1

これに対して、マージ機能が正しく動作します。

merged_df <- merge(df1, df2, by="UserID") 

これを繰り返し適用することができます。 `DF =削減(関数(...)マージ(...、すべて= T)、リスト(file_1、file_2、file_3))` フィル値のためとして:あなたは減らす使用することができます

for(i in 2:number_data_frames){ 
    merged_df <- merge(merged_df, list_of_dfs[[i]], by="UserID") 
} 
関連する問題