打开从文件夹到具有相似名称的数据帧的文件数,以便稍后对这些数据帧执行操作

时间:2015-06-09 18:45:12

标签: r csv

我一直在尝试使用相同的变量对不同的数据集执行相同的操作。我需要能够读取多个csv文件并将它们放在具有相似名称的数据框中(例如:data1,data2等),这样我就可以对它们执行相同的任务。目前我正在重写代码集5次,但如果有办法命名并循环其名称并执行这些任务,那就太好了。问题是每次执行代码时文件总数不会保持不变。

这是我到目前为止所尝试的内容,这可能会让我知道我需要做什么。

filenames <- dir(path="C/.../Files")
for(i in filenames){
  ori_data[i] <- read.table(i, header = T, sep = ",", stringsAsFactors=F)
}

当然这会引发错误,因为R无法识别ori_data [i]。 我的文件夹'文件'仅包含需要分析的csv文件。文件数可以是1到20之间的任何位置。我不知道如何命名这些数据帧。

任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

您可以将文件读入列表。将工作目录设置为包含感兴趣文件的文件夹,然后执行以下操作:

ori_data <- lapply(dir(), read.csv, header = T, sep = ",", stringsAsFactors = F)

如果您想查看ith数据框,可以输入ori_data[i]来完成此操作。

您还可以将列表组件命名为:

names(ori_data) <- dir()

为了解决您所遇到的错误,您还没有为ori_data分配空间,我会假设。例如,假设file.txt是由ori_data[i]命名的文件之一,ori_data["file.txt"]最终可能会像dir()一样。如果您尚未将ori_data初始化为数据框或列表,那么R将无法执行任何操作。

答案 1 :(得分:0)

尝试使用assign。这样的事情对你有用:

    filenames <- dir(path="C/.../Files")
for(i in filenames){
  assign(paste0('ori_data_',i),read.table(i, header = T, sep = ",",stringsAsFactors=F))
}

答案 2 :(得分:0)

这是我的方法,但我不能保证它运作良好。试一试,让我们知道。方法是创建一个空数据框,然后创建一个循环来吃掉目录中的所有cvs,并在文件中存储名称(带有选项full.names = TRUE)。

data <- data.frame()
filesf <- list.files("your_directory", full.names=TRUE)
for (i in filesf) {
     data <- rbind(data, read.csv(filesf[i]))
}

之后,您应该拥有一个名为data的唯一文件。然后,您可以使用split函数dplyrgroup_by文件拆分。