我有一个书目目录/文件夹(/ Biblio),包含66个子目录/文件夹(/ 01文件夹,/ 02文件夹,... / 66文件夹),其中包含不同数量的具有不同扩展名的文件(例如pdf,txt,csv ,...),以及具有类似扩展名的文件的子文件夹,但我对这些子子文件夹的信息不感兴趣。某些子文件夹没有任何“pdf”文件。 我想计算每个子文件夹中“pdf”文件的数量。
我可以在“/ Biblio”的所有子文件夹中列出pdf文件:
BiblioPath = "C:/Biblio"
BiblioDir = list.dirs(path = BiblioPath, full.names = TRUE, recursive = FALSE)
BiblioFiles = list.files(path = BiblioDir, pattern = "pdf", recursive = FALSE, full.names = TRUE)
(注意:字符串“pdf”永远不会出现在我的文件名中)。 “BiblioFiles”是pdf文件的完整列表,但我不知道如何在没有循环的情况下计算每个子目录中有多少“pdf”文件。
答案 0 :(得分:1)
tidyverse:
fils <- list.files("~/Development", pattern="pdf$", full.names = TRUE, recursive = TRUE)
dirs <- dirname(fils)
dirs <- sapply(dirs,digest::digest) # you don't need to see my dir names so just remove this from your work
as.data.frame(table(dirs))
## dirs Freq
## 1 06e6c4fed6e941d00c04cae3bd24888b 18
## 2 0c25ef8d27250f211d56eff8641f8beb 1
## 3 3e30987a34a74cb6846abc51e48e7f9e 1
## 4 70750a506855c6c6e09f8bdff32550f8 4
## 5 84088c9c18b0eb10478f17870886b481 1
## 6 8c5cbe2598f1f24f1549aaafd77b14c9 1
## 7 9008083601c1a75def1d1418d8acf39e 1
## 8 98bf27d6686a52772cb642a136473d86 9
## 9 baeb85661aad8bff2f2b52cb55f14ede 1
## 10 c07bfc45ce148933269d7913e1c5e833 1
## 11 c484306deae0a70b46854ede3e6b317a 22
## 12 e07698c59f5c11ac61e927e91c2e8493 27
## 13 e71c330b185bf4974d26d5379793671b 1
## 14 fe2e8912e58ba889cf7c6c3ec565b2ee 4
碱
Date
答案 1 :(得分:0)
由于您只想计算PDF文件的数量,因此您不需要此处的文件名,因此不需要第三行尝试的代码。
从前两行开始
BiblioPath = "C:/Biblio"
BiblioDir = list.dirs(path = BiblioPath, full.names = TRUE, recursive = FALSE)
然后创建一个数据框,其中包含文件夹的名称和PDF计数,例如
x <- data.frame( Dir = BiblioDir, no = 0 )
并使用
计算的文件数更新列for( i in seq( length( BiblioDir ) ) ) x$no[ i ] <-
length( list.files(path = BiblioDir[ i ], pattern = "pdf", recursive = FALSE, full.names = TRUE) )
这将为您提供一个data.frame x
,其中包含文件夹名称和每个文件夹的PDF文件。
这个 是一个循环,不确定你的问题中“没有循环”是否是一个条件;但我认为没有任何理由不在这里使用循环。
答案 2 :(得分:0)
我感谢@Richard Border和@alistaire的快速,类似,简单和优雅的答案。由于它们已作为评论发布,我已决定复制我喜欢的答案:
sapply(BiblioDir,function(dir){length(list.files(dir,pattern='pdf'))})
它完美无缺,我喜欢没有显式循环。