【问题标题】:Read multiple files under different directories in R读取R中不同目录下的多个文件
【发布时间】:2012-05-08 15:27:09
【问题描述】:

我在不同目录下有多个名称相似的文件。该目录的名称类似,例如:dir1 -> dir10。

每个目录下都有名为f1-f10的文件,我想读取每个目录中的第一个文件。

我可以使用 read.csv 吗?因为我需要使用一个变量来表示目录和文件名。

【问题讨论】:

  • 当你说“第一个文件”时,你的意思是它总是被称为 f1 吗?
  • 答案肯定是“是”,因为您可以在 read.csv 中指定目录和文件名。您是否正在寻找将“dir”和“1:10”转换为“dir1, dir2, ...dir10”然后将这些值作为参数传递给read.csv 的脚本?

标签: r readfile


【解决方案1】:

另一种构造文件名的方法是sprintf

file.paths <- sprintf ('dir%i/f1.csv', 1:10)

expand.grid:

grid <- expand.grid (1:4, 1:3)
file.paths <- sprintf ('dir%i/f%i.csv', grid [[1]], grid [[2]])

或者,使用Sys.glob

file.paths <- Sys.glob ('dir*/f1.csv')

后者还允许读取这些 dir* 中的所有 f*.csv 文件:

file.paths <- Sys.glob ('dir*/*f*.csv')

【讨论】:

    【解决方案2】:

    如果大卫的问题是正确的,并假设您的工作目录是包含所有子目录的目录...

    file.paths <- paste0('dir', 1:10, '/', 'f1.csv')
    lapply(file.paths, read.csv)
    

    应该很容易将此示例扩展到您的具体情况。如果您在 10 个文件夹中的每个文件夹中有 10 个文件,您可能想要探索的唯一其他功能是 expand.grid

    combos <- expand.grid(1:10, 1:10)
    file.paths <- paste0('dir', combos[,1], '/f', combos[,2], '.csv')
    

    【讨论】:

    • 你速度更快...而且你确实写了我省略的lapply 命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多