在for循环中读取csv文件并分配数据帧名称

时间:2011-03-24 00:06:05

标签: r for-loop

  

可能重复:
  Read multiple CSV files into separate data frames

我需要从一个文件夹中将许多csv文件读入数据帧。 csv文件名的格式为 fxpair-yyyy-mm.csv (例如AUDJPY-2009-05.csv)。我想阅读所有csv文件并创建格式为 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 格式读取的数据帧。

我错过了什么obvius?谢谢你的帮助!!

2 个答案:

答案 0 :(得分:6)

只是为了说明我的评论:

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

或者,要将所有数据帧保存在列表中:

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?

答案 1 :(得分:4)

这个怎么样:

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