我正在以这种方式阅读文件,这似乎很快:
dirPath = paste0("D:/test")
setwd(dirPath)
SF <- list.files(recursive=T, pattern=paste(".csv"), full.names=TRUE)
myfiles = lapply(SF, fread)
SF返回以下数据:
./SubFolderA/1.csv
./SubFolderA/2.csv
./SubFolderA/3.csv
./SubFolderB/1.csv
./SubFolderB/2.csv
./SubFolderB/3.csv
因此,我有两个子文件夹,每个子文件夹中有3个CSV文件。子文件夹中的CSV文件数始终相同。
问题:鉴于myfiles
,如何选择位于SubFolderB内的CSV文件?我需要单独访问此子文件夹的1.csv,2.csv和3.csv。
答案 0 :(得分:2)
由于list.files()
只返回一个字符向量,您可以使用grep
之类的函数来搜索列表中的特定值。如果你想在&#34; SubFolderB&#34;中找到文件。 (而且你不想在该目录中重新运行list.files()
),你可以做到
foldB <- grep("/SubFolderB/", SF, value=T)
foldB
# [1] "./SubFolderB/1.csv" "./SubFolderB/2.csv" "./SubFolderB/3.csv"
然后假设文件将以任何特定顺序返回并不是一个好主意。所以如果你想知道&#34; ID&#34;对于每个文件,最好从文件名本身解析出该信息。例如
gsub("\\.[^.]*$","",basename(foldB))
# [1] "1" "2" "3"
我们使用basename()
删除文件夹信息,我们使用gsub()
删除文件扩展名。