【发布时间】:2016-03-31 16:59:03
【问题描述】:
我的文件夹中有过去 15 年的年度库存数据,其中包含 15 个文件(一个文件/年)。这个文件夹也被设置为我的工作目录。我可以单独读取每个文件并将其保存到一个变量中,但我想创建一个循环或函数来读取所有文件并为每年创建一个变量。我已尝试使用以下代码,但无法获得所需的结果。有什么帮助吗?
分别读取每个文件:
allData_2000 <- read.csv("......../Data_1999-2015/scrip_high_low_year_2000.txt",sep = ",", header = TRUE, stringsAsFactors = FALSE)
allData_2001 <- read.csv("......../Data_1999-2015/scrip_high_low_year_2000.txt",sep = ",", header = TRUE, stringsAsFactors = FALSE)
但我想使用循环读取所有文件:
path <- "....Data_1999-2015"
files <- list.files(path=path, pattern="*.txt")
for(file in files)
{
perpos <- which(strsplit(file, "")[[1]]==".")
assign(
gsub(" ","",substr(file, 1, perpos-1)),
read.csv(paste(path,file,sep=",",header = TRUE, stringsAsFactors = FALSE)))
}
【问题讨论】:
-
我收到错误“找不到目标文件”。当我用 list.files(path) 检查它时,它会显示所有文件。但是用你的方法做我得到上面的错误信息
-
试试
list.files(path=path, pattern="*.txt", full.names = TRUE) -
啊,我看到了你的错误。首先,请注意您的粘贴命令包含所有
read.csv命令。然后请注意,您的路径和文件列表不包含分隔斜线。所以你会得到类似:......../Data_1999-2015scrip_high_low_year_2000.txt,当然这不是一个文件。尝试用read.csv(paste0(path, '/', file),sep=",",header = TRUE, stringsAsFactors = FALSE)替换整个read.csv部分。 -
@Archie 是您所有以“scrip_high_low_year_”开头的文件吗?
-
最好创建一个数据框列表,而不是创建具有相关名称的单个对象。这样做更容易,也更灵活。