【问题标题】:Sorting files into folders by file name in R在R中按文件名将文件排序到文件夹中
【发布时间】:2013-12-07 08:02:27
【问题描述】:

我有大量文件,每个文件的名称格式为“ARU1_20100706_6_164443000.csv”。我感兴趣的部分是频率标识符“164443000”。此文件夹中的某些文件具有相同的频率标识符;对于每个标识符,我想创建一个新文件夹并将具有此标识符的所有文件放在此文件夹中。

到目前为止,我有这个:

csvfiles <- list.files("C:\\Users\\name\\Documents\\CSV Files\\ARU1", pattern="*.csv", full.names=FALSE)

csv <- data.frame(csvfiles)

for (i in 1:length(csv)) {
  csv$freq <- str_sub(csvfiles, start = 18, end = 25)     
}

我是一个完整的 R 新手并且正在努力,所以提前感谢您的帮助。

【问题讨论】:

标签: r file sorting directory


【解决方案1】:

您已经拥有 csv 文件列表。接下来我将提取标识符:

ids = substr(csvfiles, 17, 24)

假设 csv 文件始终具有完全相同的长度,即 ID 始终位于 csv 名称中的相同位置。

然后你需要创建目录集:

no_return_values = sapply(ids, dir.create)

并复制文件:

no_return_values = mapply(file.copy, csvfiles, ids)

我没有测试过代码,但这些是您需要执行的基本命令和步骤。研究我使用的函数的文档来了解它们的作用。

您需要将*apply 系列函数解读为:对于列表中的每个元素,执行此函数。 *apply 函数没有返回值,因为它们仅用于其副作用,即创建目录并复制文件。

【讨论】:

    【解决方案2】:
    • 我会为这个任务使用by,因为它是一个分组任务。你嘘
    • file.copy 复制文件。它是矢量化的,因此无需使用循环
    • 使用file.path 创建独立于所用操作系统的路径。

    类似这样的:

    dat <- data.frame(files = csvfiles)
    dat$id <- gsub('.*_(.*)[.]csv','\\1',dat$files)
    by(dat,dat$id,function(x){
     dir_path <- file.path(getwd(),unique(x$id)) ## replace getwd by any path
     dir.create(dir_path)
     file.copy(dat$files,dir_path)
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 2022-08-05
      • 2011-04-23
      • 2016-07-28
      相关资源
      最近更新 更多