如何在文件路径名称中使用通配符进行R中的模式匹配?



我有一个目录与我的rproj和"data"所有输出的文件夹。data文件夹中有40个子目录,每个目录都包含"output.csv"子目录有完全不同的名称,但都以1或2结尾。

data/****1/output.csv
data/****2/output.csv

星号表示名称的不同部分(不同数量的字母),并且我需要的每个csv都具有完全相同的名称。

我需要根据子目录以1还是2结束分别列出所有的output.csv"s,并且我一直在尝试使用grep()函数

allOutputFiles <- list.files(pattern = "output.csv", recursive = TRUE, full.names = TRUE)
files1 <- grep(pattern = "./data/1$", allOutputFiles, value = TRUE)
files2 <- grep(pattern = "./data/2$", allOutputFiles, value = TRUE)

但是每次我运行它,它返回character(0)。如果我在1$前面加一个'',它返回invalid regular expression './data/1$', reason 'Invalid back reference'

如何正确地将通配符应用于不同的文件路径?

我们可以使用dirname获取父目录,然后使用gsub提取父目录的最后一个字符。然后我们使用split用这一个字母来分隔文件名。

# allOutputFiles <- c("data/****1/output.csv","data/****2/output.csv")
allOutputFiles <- list.files(pattern = "output.csv", recursive = TRUE, full.names = TRUE)
gsub(".*(.)$", "\1", dirname(allOutputFiles))
# [1] "1" "2"
out <- split(allOutputFiles, gsub(".*(.)$", "\1", dirname(allOutputFiles)))
out
# $`1`
# [1] "data/****1/output.csv"
# $`2`
# [1] "data/****2/output.csv"

如果你想在上面索引,用out[["1"]]索引(虽然out[[1]]在这里很方便,但这是基于你选择的最后一个字母的巧合,不应该依赖)。

最新更新