R:统计不同子目录/文件夹中具有特定扩展名的文件数

R:统计不同子目录/文件夹中具有特定扩展名的文件数,r,R,我有一个书目目录/文件夹(/Biblio),其中包含66个子目录/文件夹(/01文件夹,/02文件夹,/66文件夹),其中包含不同数量的文件,具有不同的扩展名(例如pdf、txt、csv,…),以及具有类似扩展名的子文件夹,但我对这些子文件夹的信息不感兴趣。某些子文件夹没有任何“pdf”文件我想计算每个子文件夹中的“pdf”文件数 我可以列出“/Biblio”所有子文件夹中的pdf文件,包括: BiblioPath = "C:/Biblio" BiblioDir = list.dirs(path

我有一个书目目录/文件夹(/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”文件

由于您只想计算PDF文件的数量,因此此处不需要文件名,因此不需要尝试代码的第三行

从前两行开始

BiblioPath = "C:/Biblio"
BiblioDir = list.dirs(path = BiblioPath, full.names = TRUE, recursive = FALSE)
然后创建一个数据框,其中包含文件夹名称和PDF计数,例如

x <- data.frame( Dir = BiblioDir, no = 0 )
xtidyverse:

library(tidyverse)

fils <- list.files("~/Development", pattern="pdf$", full.names = TRUE, recursive = TRUE)

data_frame(
  dir = dirname(fils)
) %>% 
  count(dir) %>% 
  mutate(dir = map_chr(dir, digest::digest)) # you don't need to see my dir names so just remove this from your work

## # A tibble: 14 x 2
##                                 dir     n
##                               <chr> <int>
##  1 06e6c4fed6e941d00c04cae3bd24888b    18
##  2 98bf27d6686a52772cb642a136473d86     9
##  3 c07bfc45ce148933269d7913e1c5e833     1
##  4 84088c9c18b0eb10478f17870886b481     1
##  5 baeb85661aad8bff2f2b52cb55f14ede     1
##  6 c484306deae0a70b46854ede3e6b317a    22
##  7 70750a506855c6c6e09f8bdff32550f8     4
##  8 8c5cbe2598f1f24f1549aaafd77b14c9     1
##  9 9008083601c1a75def1d1418d8acf39e     1
## 10 0c25ef8d27250f211d56eff8641f8beb     1
## 11 3e30987a34a74cb6846abc51e48e7f9e     1
## 12 e71c330b185bf4974d26d5379793671b     1
## 13 fe2e8912e58ba889cf7c6c3ec565b2ee     4
## 14 e07698c59f5c11ac61e927e91c2e8493    27
库(tidyverse)
费尔斯%
计数(目录)%>%
mutate(dir=map_chr(dir,digest::digest))#您不需要看到我的目录名,所以只需将其从工作中删除即可
###A tibble:14 x 2
##目录n
##                                
##1 06E6C4FED6E941D0C04CAE3BD24888B 18
##2 98BF27D6686A5272CB642A136473D86 9
##3 c07bfc45ce148933269d7913e1c5e833 1
##4 84088c9c18b0eb10478f17870886b481 1
##5 BAEB85661AAD8BF2F2B52CB55F14EDE 1
##6 C4843060A70B46854EDE3E6B317A 22
##7 70750A506855C6E09F8BDFF32550F8 4
##8 8C5CBE2598F1F24F1549AAFD77B14C9 1
##9 9008083601c1a75def1d1418d8acf39e 1
##10 0c25ef8d27250f211d56eff8641f8beb 1
##11 3e30987a34a74cb6846abc51e48e7f9e 1
##12 E71C330B185BF4974D26D53793671B 1
##12月13日E58BA889CF7C6C3EC565B2EE4
##14 e07698c59f5c11ac61e927e91c2e8493 27
基数:


fils我感谢@Richard Border和@alistaire给出了迅速、相似、简单而优雅的答案。由于它们已作为评论发布,我决定复制我更喜欢的答案:

sapply(BiblioDir,function(dir){length(list.files(dir,pattern='pdf'))})

它工作得很好,我喜欢没有显式循环

类似于
sappy(BiblioDir,function(dir)sum(grepl(“pdf$”,list.files(path=dir)))
(未测试)的东西应该可以工作。
sappy(BiblioDir,function(dir){length(list.files)(dir,pattern='pdf'))
怎么能
.pdf
不出现在文件名中?@hrbrmstr:字符串“pdf”不出现在我的“文件名”中,使用术语FileName.fileextension时,在您的情况下可能没有问题,但为了确保只获取具有特定扩展名的文件,您可以使用以下正则表达式:
pattern=“\\.ext$”
。这将使用双反斜杠(
\\.
)转义点,而
$
指定
.ext
必须是字符串的结尾(在本例中为文件名)。您不妨使用正则表达式的强大功能尽可能地帮助您!
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
sapply(BiblioDir,function(dir){length(list.files(dir,pattern='pdf'))})