2012-04-18 24 views
1

私はマージしたい共通のヘッダを持つ約100個のcsvファイルを持っています。ヘッダーは「Lat」、「Long」、および「value」です。私は、出力が複数のcsvファイルをR内にマージする

"Lat" "Lon" "Value1" "Value2"..."Value 100" 

LatLon列は、CSVファイルのすべてで同一であるであろうと、このようなすべてのCSVファイルをマージしようとしています。 2つのファイルをマージする

merge(data.frame1, data.frame2, by=c('Lat','Lon')) 

簡単ですしかし、私は仕事をdidntの次のコードを試してみました:

file_list <- list.files(~/source) 
list_of_files <- lapply(file_list, read.csv) 
m1 <- merge_all(list_of_files, by=c("Lat","Lon"), all=TRUE) 

誰もがこの点で私を助けることができる

Error in merge.data.frame(dfs[[1]], Recall(dfs[-1]), all = TRUE, sort = FALSE, : 
    formal argument "all" matched by multiple actual arguments. 

エラーがスローされます。

+1

'list.files(〜/ source)'は構文エラーです。 'merge_all'は通常のRインストールではありません。それがどこにあるか教えてください。 –

+0

merge_allにはパッケージの形が付属していますが、構文は残念です...プログラムで正しいものを使用しました。 – Navin

答えて

4

あなたがReduceとプレーンmergeを使用することができます。

m1 <- Reduce(function(old, new) { merge(old, new, by=c('Lat','Lon')) }, list_of_files) 
+2

'、すべて= TRUE'を忘れました。 –

1

これは、同様に動作するかもしれませんが、あなたは私たちで動作するように任意のデータを与えられていません。私は個人的にdbauppの方法を使い、どれが速いのかわからない。しかし、私は大規模なデータに慣れることはほとんどないので、Reduceメソッドは私の仕事のほうがはるかに簡単です(私は数ヶ月で新しいRパッケージをリリースします。これは基本的にはマルチマージを行う機能を持っていますdbauppの反応と同じ考え方で)。大きなデータを扱っているなら、2つのベンチマークをしたいかもしれません(PSをどこかから盗んだのですが、私はループで問題を解決することはめったにありませんが、どこを引用することはできません)。

DF <- list_of_files[[1]][, c('lat', 'Lon')] 
    for (.df in list_of_files) { 
    DF <-merge(DF,.df,by=c('Lat', 'Lon'), all=T, suffixes=c("", "")) 
} 
DF 
+0

ありがとう、どちらもうまくいきますが、いくつかのcsvファイルをマージするために、 "match.names(clabs、names(xi))のエラー:名前が以前の名前と一致しません"というエラーが表示されます。私は、以前に報告されたmerge()関数のいくつかのバグがあったと思います。 – Navin

関連する問題