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