我有一个文件列表,它是使用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
也许可以工作但是在寻找类似的情况之后我还没找到答案。
答案 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)]})