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

use*_*042 3 for-loop r

可能重复:将
多个CSV文件读入单独的数据框

我需要从一个文件夹中将许多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)
}
Run Code Online (Sandbox Code Playgroud)

csv.read似乎工作正常,但我无法以我想要的方式创建数据框对象.我只是想根据文件名命名以fxpair.yyyy.mm格式读取的数据帧.

我错过了什么obvius?感谢您的任何帮助!!

Jor*_*eys 6

只是为了说明我的评论:

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

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

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

我会选择第二个解决方案,因为我喜欢使用列表.之后清理工作区不那么麻烦.您也摆脱了namei全球环境杂乱.如果您不小心,这些可能会在代码中导致一些有趣的错误.另请参阅R是否适用于家庭而不是语法糖?


Mat*_*wle 5

这个怎么样 :

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