select 个具有模式的文件列表中的文件

select files from a list of files with a pattern

我有一个文件列表,它是使用 list.files:

创建的
filesxx<-list.files(pattern="0-4000")

获取如下列表:

  [1] "Alta Guajira Coord & elevation TS 0-4000.txt"     "Baja Guajira Coord           & elevation TS 0-4000.txt"    
  [3] "Bajo Meta Coord & elevation TS 0-4000.txt"        "Rio Arauca Coord & elevation TS 0-4000.txt"      
  [5] "Rio Catatubo Coord & elevation TS 0-4000.txt"     "Rio Cesar Coord & elevation TS 0-4000.txt"       
  [7] "Rio Sogamoso Coord & elevation TS 0-4000.txt"     "Rio Tomo Coord & elevation TS 0-4000.txt"        
  [9] "Sabana de Bogota Coord & elevation TS 0-4000.txt" "Total Area Coord & elevation TS 0-4000.txt"  

我想从这个列表中创建一个循环,该循环将 select 根据循环变量 (a) 将是名称中的模式的其中一个文件,例如变量 (a) 将是:"Alta Guajira" 并且在下一个循环中 "Rio Tomo".. 等等

我该怎么做,如何从已经创建的文件列表中选择一个带有模式的文件? 我认为函数 Shopt 更多的是排除模式,也许函数 find 可以工作但是在寻找一些类似的案例之后我还没有找到答案。

您可以使用 list.files() 列出工作目录中的文件。它有一个参数允许您指定特定的模式:

 list.files(pattern = "Alta Guajira")
 # [1] "Alta Guajira Coord & elevation TS 0-4000.txt"  

如果你有一个带有模式的向量,比如:

patterns <- c("Alta Guajira", "Rio Tomo", "Rio Sogamoso")
sapply(patterns, function(x){list.files(pattern = x)})

编辑

如果您已经有了文件名,那么您基本上是在寻找字符向量中的模式。

df <- c("Alta Guajira Coord & elevation TS 0-4000.txt","Baja Guajira Coord & elevation TS 0-4000.txt", 
        "Bajo Meta Coord & elevation TS 0-4000.txt", "Rio Arauca Coord & elevation TS 0-4000.txt",
        "Rio Catatubo Coord & elevation TS 0-4000.txt", "Rio Cesar Coord & elevation TS 0-4000.txt",
        "Rio Sogamoso Coord & elevation TS 0-4000.txt", "Rio Tomo Coord & elevation TS 0-4000.txt",
        "Sabana de Bogota Coord & elevation TS 0-4000.txt", "Total Area Coord & elevation TS 0-4000.txt")

patterns <- c("Alta Guajira", "Rio Tomo", "Rio Sogamoso")

it  <- 0
res <- c()
for(i in patterns){
    it  <- it + 1
    res <- append(res, df[grepl(pattern = i, x = df)])
}
res
# [1] "Alta Guajira Coord & elevation TS 0-4000.txt" "Rio Tomo Coord & elevation TS 0-4000.txt"    
# [3] "Rio Sogamoso Coord & elevation TS 0-4000.txt"

或者,或者:

res2 <- sapply(patterns, function(y){df[grepl(pattern = y, x = df)]})