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