1

共通のヘッダーを持つ約100個のcsvファイルがあり、それらをマージしたいと思います。ヘッダーは「Lat」、「Long」、「value」です。出力が次のようになるように、すべてのcsvファイルをマージしようとしています

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

LatLon列はすべてのcsvファイルで同一です。2つのファイルのマージは簡単です

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

しかし、私はうまくいかなかった次のコードを試しました:

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.  

誰かがこの点で私を助けることができますか?

4

2 に答える 2

4

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

m1 <- Reduce(function(old, new) { merge(old, new, by=c('Lat','Lon')) }, list_of_files)
于 2012-04-18T12:17:29.070 に答える
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
于 2012-04-18T14:02:07.387 に答える