从文件夹中读取所有txt文件,并为r中的每个文件创建单独的变量

时间:2015-12-25 21:17:51

标签: r csv

我在过去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)))
}

2 个答案:

答案 0 :(得分:2)

试试这个改进的代码:

HWND

答案 1 :(得分:-1)

尝试这样的事,也许。

df_list = list()
counter = 1
for(file in files){
  temp_df = read.csv(paste0(path, '/', file), header=T, stringsAsFactors = F)
  temp_df$year = gsub('[^0-9]', '', file)
  df_list[[counter]] = temp_df
  counter = counter + 1
}
big_df = do.call(rbind, df_list)

创建一个空列表,然后遍历文件,读取它们。删除文件中的任何非数字字符以获取年份(这是基于您的文件上面的内容:一些文本,以及年份;如果文件看起来不像那样,你需要一个与我所做的gsub不同的方法),并将其创建为一个新变量,然后将整个数据帧存储在一个列表中。然后将数据帧绑定到最后的单个数据帧中。

编辑:重新阅读你的问题,我不确定我告诉你的是你想做什么。如果您只是想将所有数据帧加载到内存中,并为它们提供一个变量以便您可以访问它们而不将它们放入单个数据帧中,我可能会这样做:

df_list = list()
for(file in files){
  temp_df = read.csv(paste0(path, '/', file), header=T, stringsAsFactors = F)
  year = gsub('[^0-9]', '', file)
  df_list[[year]] = temp_df
}

然后可以访问每个数据帧:df_list[['2000']]将是2000年的数据帧。