2011-06-29 136 views
3

我以多個.csv讀取,現在想要在循環中更改其所有列名稱。我只能找出如何改變一個表的名字:R:更改多個表的列名稱

colnames(w01_10temp) <- c("date", "time", "temp", "na") 

我也東東在的.csv文件R.我以前:

filenames <- list.files(path=getwd()) 
numfiles <- length(filenames) 
for (all_temp in c(1:numfiles)) { 
filenames[all_temp] <- paste(filenames[all_temp],sep="") 
assign(gsub([.]ASC$","temp",filenames[all_temp]),read.delim2(filenames[all_temp], fileEncoding="ISO-8859-15", skip = 4)) } 

所以我試圖把lapply在循環,沒有成功:

for (all_temp in lapply(filenames,myReadTable)) { 
    filenames[all_temp] <- paste(filenames[all_temp],sep="") 
    } 
+0

我不知道你期望像'filenames [all_temp] < - paste(文件名[all_temp],sep =「」)這樣的行會實現。無論如何:如果我正確理解你的最後一個問題:將@ mbq的myReadTable的第二行(使用'read.table')更改爲'x <-read.delim2(文件名[all_temp],fileEncoding =「ISO-8859-15」,跳過= 4)'。結果將成爲一個列表,其中包含每個文件的所有表格以及正確的列名稱。 –

回答

7

寫包裝函數:

myReadTable<-function(file){ 
read.table(file,...)->x 
names(x)<-c("date","time","temp","na") 
return(x) 
} 

然後lapply它通過文件名向量來獲取數據幀列表(這比使用全局變量更易於管理)。

lapply(c('fileA.csv','fileB.csv','fileC.csv'),myReadTable) 
+0

謝謝,但我該如何使用包含所有文件的自動創建的名稱向量來做到這一點?文件列表非常長,並且不是連續的,例如:1.csv 3.csv 4.csv 6.csv – tomtomme

+0

@tomtomme僅通過'lapply(file_name_vector,myReadTable)'...如果您將此列表作爲單個字符串, 'strsplit'可能有助於將其轉換爲矢量。 – mbq