2012-04-18 176 views
1

我有大約100個帶有常見頭文件的csv文件,我想合併它們。標題是「Lat」,「Long」和「value」。我想合併所有的CSV文件,使得輸出將是在R中合併多個csv文件

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

LatLon列所有CSV文件的相同。合併兩個文件是很容易

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. 

誰能幫我在這方面。

+1

'list.files(〜/ source)'是一個語法錯誤。 'merge_all'不是通常的R安裝;請告訴我們它在哪裏。 – 2012-04-18 12:11:42

+0

merge_all附帶軟件包重塑,對不起語法......但在程序中我使用了正確的語法。 – Navin 2012-04-18 12:18:13

回答

4

您可以使用Reduce和平原merge

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

你忘了',all = TRUE'。 – 2012-04-18 13:44:22

1

這可能工作以及但是你有沒有給我們任何資料的項目。我個人使用dbaupp的方式,並不確定哪一個更快;然而,我很少涉及大數據,所以Reduce方法對我來說就是這麼簡單,就像我去的那樣工作(我在幾個月內發佈了一個新的R包,它具有基本基於多組合的功能與dbaupp的迴應一樣)。如果你正在處理大數據,你可能需要對這兩個數據進行基準測試(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 2012-04-19 08:37:50