我该如何将多个目录中的多个文件读入R以进行处理?

9

我正在进行一项模拟研究,并需要处理和保存来自多个文本文件的结果。我的数据组织方式是,有子目录,在每个子目录中,我需要处理并获取1000个数据文件的单个结果。在SAS中,使用宏非常容易实现此操作。但是,我是R的新手,无法弄清如何执行此操作。以下是我想要实现的内容。

DATA Folder-> DC1 -> DC1R1.txt ... DC1R1000.txt
              DC2 -> DC2R1.txt ... DC2R1000.txt

任何帮助都将不胜感激!

尝试使用 list.files。http://stackoverflow.com/search?q=%5Br%5D+list.files - Roman Luštrik
4个回答

12

我现在不在使用R的电脑旁边,但是可以阅读与文件相关的函数帮助文档:

dir 函数会列出文件和目录。 它具有递归参数。 list.files 是 `dir` 的别名。`file.info` 函数将告诉您(除其他外),路径是否为目录,`file.path` 将组合路径部分。

basenamedirname 函数也可能很有用。

请注意,所有这些函数都进行了向量化处理。

编辑 现在在计算机旁边,所以这里有一个示例:

# Make a function to process each file
processFile <- function(f) {
  df <- read.csv(f)
  # ...and do stuff...
  file.info(f)$size # dummy result
}

# Find all .csv files
files <- dir("/foo/bar/", recursive=TRUE, full.names=TRUE, pattern="\\.csv$")

# Apply the function to all files.
result <- sapply(files, processFile)

谢谢大家的回复!@Tommy.....你的编码到目前为止是有效的....希望一切顺利...我有768种数据条件,每个条件下有1000个模拟文件。处理起来需要一些时间,所以等完成后我会给出一个状态更新。 - Stefanie

8

如果你需要对每个文件运行相同的分析,那么你可以使用 list.files(recursive = T) 一次性访问它们。这是在假定你已经将工作目录设置为 Data Folder 的情况下。 recursive = T 还会列出所有子目录中的文件。


谢谢Ramnath。我从来没有用过list.files,但会尝试一下。Tommy的编码目前还可以。 - Stefanie

5

filenames <- list.files("路径/到/文件", recursive=TRUE) 这段代码会列出指定路径下及其子目录中的所有文件。


0

您可以使用 Perl 的 glob() 函数获取文件列表,并通过 RSPerl 接口将其发送到 R。


嗨,Ltamar。我不熟悉Perl。我是一名统计学家,从未有过使用它的需要。尽管如此...我听说它非常强大。 - Stefanie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接