从具有模式的文件列表中选择文件

时间:2017-05-16 11:49:59

标签: r filenames

我有一个文件列表,它是使用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"  

从这个列表中我想创建一个循环,根据循环变量选择其中一个文件(a)将是名称中的模式,例如变量(a)将是:“Alta Guajira”并在下一个周期“里约托摩”等...

如何执行此操作,如何从已制作的文件列表中选择带有模式的文件? 我认为函数Shopt更多的是排除模式,函数find也许可以工作但是在寻找类似的情况之后我还没找到答案。

1 个答案:

答案 0 :(得分:2)

您可以使用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)]})