2011-03-24 70 views
2

可能重複:
Read multiple CSV files into separate data frames閱讀CSV文件循環和分配數據幀的名字

我需要從一個文件夾看了很多的CSV文件導入dataframes。 csv文件名稱的形式爲fxpair-YYYY-mm.csv(例如AUDJPY-2009-05.csv)的。我想讀的所有CSV文件並創建表單的dataframes fxpair.yyyy.mm

我無法從read.csv報表創建任務的循環數據幀的名字

filenames <- list.files(path=getwd()) 
numfiles <- length(filenames) 

#fx.data.frames to hold names that will be assigned to csv files in csv.read 
fx.data.frames <- gsub(pattern="-",x=filenames,replacement=".") 
fx.data.frames <- gsub(pattern=".csv",x=fx.data.frames,replacement="") 

i <-1 
for (i in c(1:numfiles)){ 
    filenames[i] <- paste(".\\",filenames[i],sep="") 
    fx.data.frames[i] <- read.csv(filenames[i], header=FALSE) 
} 

的csv.read似乎很好地工作,但我不能創造我想要的方式,數據幀的對象。我只是想一些方法來命名的基礎上的文件名fxpair.yyyy.mm格式閱讀dataframes。

我缺少的東西obvius?感謝您的任何幫助!!

+0

也看到涉及讀取多個文本文件轉換爲R http://goo.gl/jM1J7另一計算器的問題。請記住,處理R中的數據幀列表更容易,而不是將每個文件寫入不同的數據幀,因爲處理變得更容易。 – Ramnath 2011-03-24 00:48:22

+1

在一個註釋中:在R中,你不必初始化我,你可以使用'for(i in 1:numfiles)'並刪除'c'。更好的是,只需在你的循環中使用'for(我的文件名)',爲你節省很多麻煩。 – 2011-03-24 00:57:37

+0

偉大的提示,謝謝你們!很有幫助。 – user674042 2011-03-24 15:28:53

回答

4

如何:

for (i in c(1:numfiles)){ 
    filenames[i] <- paste(".\\",filenames[i],sep="") 
    assign(gsub("[.]csv$","",filenames[i]),read.csv(filenames[i], header=FALSE)) 
} 
+0

道歉,我相對較新的R,但我看不到這是如何創建名爲fxpair.yyyy.mm的數據幀。我塗膠在此代碼,運行它,然後嘗試了LS(),以確保所有的CSV文件的進來作爲正確命名dataframes但沒有什麼比其他「文件名」,「fx.data.frames」和「我」的存在。謝謝。 – user674042 2011-03-24 00:37:50

5

只是爲了說明我的評論:

for (i in filenames){ 
    name <- gsub("-",".",i) 
    name <- gsub(".csv","",name) 
    i <- paste(".\\",i,sep="") 
    assign(name,read.csv(i, header=FALSE) 
} 

或者,要保存所有dataframes在一個列表:

All <- lapply(filenames,function(i){ 
    i <- paste(".\\",i,sep="") 
    read.csv(i, header=FALSE) 
}) 
filenames <- gsub("-",".",filenames) 
names(All) <- gsub(".csv","",filenames) 

我會去第二種解決方案,因爲我喜歡使用列表。之後清理工作區並不麻煩。您還可以擺脫全球環境中的namei混亂。如果你不小心,這些可能會在代碼後面引起一些有趣的錯誤。另請參見Is R's apply family more than syntactic sugar?