按文件名在R中将文件排序到文件夹中

时间:2013-11-22 12:24:41

标签: r file sorting directory

我有大量文件,每个文件的名称格式为“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新手,我正在努力,所以提前感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

您已拥有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函数没有返回值,因为它们仅用于副作用,即创建目录并复制文件。

答案 1 :(得分:0)

  • 我会将by用于此任务,因为它是一个分组任务。你sh
  • 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)
})