如何从R中的Lappy输出中获取特定文件?
我以这种方式读取文件,速度似乎相当快:如何从R中的Lappy输出中获取特定文件?,r,file,lapply,R,File,Lapply,我以这种方式读取文件,速度似乎相当快: dirPath = paste0("D:/test") setwd(dirPath) SF <- list.files(recursive=T, pattern=paste(".csv"), full.names=TRUE) myfiles = lapply(SF, fread) 因此,我有两个子文件夹,每个子文件夹中有3个CSV文件。子文件夹中的CSV文件数始终相同 问题:给定myfiles,如何选择位于子文件夹B内的CSV文件?我需要单独访问此
dirPath = paste0("D:/test")
setwd(dirPath)
SF <- list.files(recursive=T, pattern=paste(".csv"), full.names=TRUE)
myfiles = lapply(SF, fread)
因此,我有两个子文件夹,每个子文件夹中有3个CSV文件。子文件夹中的CSV文件数始终相同
问题:给定myfiles
,如何选择位于子文件夹B内的CSV文件?我需要单独访问此子文件夹的1.csv、2.csv和3.csv。由于list.files()
只返回一个字符向量,您可以使用类似grep的函数来搜索列表中的特定值。如果您想在“子文件夹B”中查找文件(并且不想在该目录中重新运行list.files()
),您可以这样做
foldB <- grep("/SubFolderB/", SF, value=T)
foldB
# [1] "./SubFolderB/1.csv" "./SubFolderB/2.csv" "./SubFolderB/3.csv"
我们使用basename()
删除文件夹信息,使用gsub()
删除文件扩展名。@MrFlickr:谢谢!另外,我刚刚注意到的另一个问题是:假设我在子文件夹A中有大约40个文件,名称为1.csv、2.csv、…40.csv。这些CSV文件按以下顺序存储在myfiles中:1,10,11,12,2,21,22,3,31,32等。是否有任何方法将其排序为1,2,3等。?如果没有,我如何生成像1,10,11,12,2,21.这样的索引。。以便以正确的顺序处理文件。问题是我必须知道,例如,第二个元素是2.csv(或10.csv)@MrFlick:非常感谢!你为什么不把答案贴出来?仅限评论当我猜测问题可能是什么或没有时间键入正确答案时,我会使用评论,但可以为OP提供正确方向的观点。如果我发现我的评论完全满足原来的问题,我会把它们转移到一个答案。
foldB <- grep("/SubFolderB/", SF, value=T)
foldB
# [1] "./SubFolderB/1.csv" "./SubFolderB/2.csv" "./SubFolderB/3.csv"
gsub("\\.[^.]*$","",basename(foldB))
# [1] "1" "2" "3"