【问题标题】:Listing *.tif files in directories meeting certain criteria在满足特定条件的目录中列出 *.tif 文件
【发布时间】:2021-11-27 16:07:08
【问题描述】:

我想列出目录中包含特定数值的所有 *.tif 文件。 例子: Path_source <- "C:/Files/" 在这个文件夹中,我有 1000 个文件夹,每个文件夹都命名为 jobXXX,其中 XXX 代表数值 1-999。所以有一个文件夹job0job1,...,job999。 在每个 jobXXX 文件夹中,我都有其他文件夹和文件。从这种文件夹结构中,我想提取具有以下模式的所有文件:

Year <- 2021

file.ls <- list.files(path=Path_source, pattern=paste0("Text_",Year,".*\\.tif"),all.files = TRUE, full.names = TRUE, recursive = TRUE)

所以我现在缺少的元素是过滤具有特定工作编号的文件夹的目录:

jobs <- c(1,14,45,67,129,834)

示例结果:

> file.ls

[1] "C:/Files/job14/folder12/Text_2021_anothertext_abc.tif"

[2] "C:/Files/job45/folder81/Text_2021_anothertext_efg.tif"

我应该使用哪个函数?

谢谢

【问题讨论】:

  • 请给出 3 或 4 个目录名称示例(想要的和不想要的)和预期输出。

标签: r string directory gsub string-substitution


【解决方案1】:

以下函数创建部分文件名。然后sapply 循环获取函数返回的向量中的目录。

make_dir_name <- function(Path_prefix, job_prefix, job_number){
  fmt_string <- paste0(Path_prefix, job_prefix, "%d[^[:digit:]]+")
  sprintf(fmt_string, job_number)
}

jobs_dirs <- make_dir_name(Path_source, "job", jobs)
i <- sapply(jobs_dirs, \(d) grep(d, file.ls))
i <- unname(unlist(i))
file.ls[i]

测试数据

file.ls <-
c("C:/Files/job14/folder12/Text_2021_anothertext_abc.tif", 
  "C:/Files/job45/folder81/Text_2021_anothertext_efg.tif")

【讨论】:

  • 谢谢,这不是我所需要的,但非常有帮助!我准备了一个示例输出以使我的问题更清楚。
  • @MIH 看看编辑解决了没有,我把函数简化了。
  • 效果很好 - 非常感谢!只是索引文件.ls[i] 很有趣——它不起作用。
  • @MIH i 的值是多少?
  • 我得到一个列表,目录是列表名称。 &gt; i$C:/Files/job45/folder81/Text_2021_anothertext_efg.tifinteger(0)
【解决方案2】:

坚持使用 base r 这可能会有所帮助。

files <- paste("job", seq(1,10), ".tif", sep = "")

numbers <- seq(1,10, by = 2)
files_I_Want <- paste("job",numbers, ".tif",sep = "")

files[files %in% files_I_Want]

使用%in% 运算符,我可以看到我构建的文件中有哪些文件是我想要的向量。

【讨论】:

  • 谢谢,这不是我所需要的——我举了一个输出示例,因为我现在意识到我并不清楚。
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2014-06-30
  • 2020-03-30
  • 2021-12-17
相关资源
最近更新 更多