如何从R中的lapply输出获取特定文件?

时间:2015-01-23 20:50:03

标签: r file lapply

我正在以这种方式阅读文件,这似乎很快:

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。

1 个答案:

答案 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()删除文件扩展名。