この種のものではRで比較的新しいものがかなり検索され、多くのものが見つかりませんでした。重複する行を含む複数のデータフレームをマージするR
私はそれぞれ約40,000 - 60,000行の約150個の.csvファイルを持っています.3つの列を1つの大きなデータフレームにマージしようとしています。私は、各ファイルから関心のある3つのカラム( "id"、 "name"、 "value")を抽出し、大きなデータフレーム "MergedData"に "id"と "name"をマージする小さなスクリプトを持っています。
file_list <- list.files()
for (file in file_list){
if(!exists("MergedData")){
MergedData <- read.csv(file, skip=5)[ ,c("id", "name", "value")]
colnames(MergedData) <- c("id", "name", file)
}
else if(exists("MergedData")){
temp_data <- read.csv(file, skip=5)[ ,c("id", "name", "value")]
colnames(temp_data) <- c("id", "name", file)
MergedData <- merge(MergedData, temp_data, by=c("id", "name"), all=TRUE)
rm(temp_data)
}
}
必ずしもすべてのファイルがあります。ここに私のコード(!私はこれはこれを行うのは非常に非効率的な方法であると確信している、それは今の私と一緒に大丈夫ですが、もちろん、私はより良いオプションに開いている)であります同じ行数ですが、多くの行は多くのファイルに共通です。私は行の包括的なリストを持っていないので、MergedDataファイルにはまだ存在しない新しい行を追加するためにall = TRUEを含めました。
私の問題は:ファイルの多くは、同じ "ID"と "名前"エントリが異なる "値"エントリを持つ2-4行を含んでいます。だから私がそれらをマージすると、私は結局のところ手を抜く可能性のあるすべての組み合わせに対して行を追加することになります。最も不満は、これらの重複のどれも私にとって何の関心もないということです。最初のエントリの値を取得し、それ以上の重複エントリを無視する簡単な方法はありますか?
ありがとうございます!
私はこれを十分に説明したとは思わない。私の最終目標は、 "id"、 "name"という列を持つデータフレームであり、150個の各ファイルからの "value"の150列です。ファイルに "id" "name"というコンボの値がある場合は、それが必要です。私はそれらを積み重ね、重複した "ID" "名前"のエントリを削除し、関連するデータを削除しませんか? – JRoon
更新されたコードを見て、それがあなたが探していたものに近いかどうか教えてください。 – eipi10
これは近いです。 '> df = bind_rows(df)' 警告メッセージ: 1:rbind_all(x、.id):不一致要因レベル:文字に強制する 2:rbind_all(x、.id)で: df = dcast(df、id + name〜source.file、value.var = "value") ' '> df = dcast(集計関数がありません):デフォルトの長さです。結果として得られるデータフレームは構造化されていますが、値は実際には値そのものではなく、その行の各.csvファイルのエントリ数です。 – JRoon