我需要从一个文件夹中将许多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?谢谢你的帮助!!
答案 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)
我会选择第二个解决方案,因为我喜欢使用列表。之后清理工作区不那么麻烦。您还可以消除全局环境中的name
和i
混乱。如果您不小心,这些可能会在代码中导致一些有趣的错误。另请参阅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))
}