2011-06-29 97 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