【问题标题】:How can I read multiple files from multiple directories into R for processing?如何将多个目录中的多个文件读入 R 进行处理?
【发布时间】:2011-09-11 05:34:58
【问题描述】:

我正在运行一项模拟研究,需要处理和保存来自多个文本文件的结果。我以这样一种方式组织数据,其中有子目录,在每个子目录中,我需要处理并获取 1000 个数据文件的单独结果。这在 SAS 中使用宏很容易做到。但是,我是 R 新手,无法弄清楚如何做到这一点。以下是我想要完成的。

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

任何帮助将不胜感激!

【问题讨论】:

标签: r batch-file


【解决方案1】:

我现在不在使用 R 的计算机附近,但请阅读文件相关功能的帮助:

dir 函数将列出文件和目录。它有一个递归参数。 list.filesdir 的别名。 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 个模拟文件。处理需要一段时间,所以我会在完成后给出一个状态。
【解决方案2】:

如果您需要对每个文件运行相同的分析,则可以使用list.files(recursive = T) 一次性访问它们。这是假设您已经将工作目录设置为Data Folderrecursive = T 也列出了子目录中的所有文件。

【讨论】:

  • 感谢拉姆纳特。我从来没有 list.files 但会试一试。到目前为止,Tommy 的编码工作正常。
【解决方案3】:

filenames &lt;- list.files("path/to/files", recursive=TRUE) 这将为您提供位于一个文件夹下的所有文件及其下的子文件夹。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 嗨,Ltamar。我不熟悉 Perl。我是一名统计学家,从来没有需要使用这样的。虽然....我听说它很强大。
    猜你喜欢
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多