如何在R中创建包含目录和子目录名称的表?
问题: 我想用R生成一个给定路径的目录名和子目录名表 所需输出: 输出应该是data.frame或类似的两列,我可以用如何在R中创建包含目录和子目录名称的表?,r,knitr,r-markdown,R,Knitr,R Markdown,问题: 我想用R生成一个给定路径的目录名和子目录名表 所需输出: 输出应该是data.frame或类似的两列,我可以用knitr::kable处理它,用rmarkdown生成一个漂亮的.html 因此,结果应大致如下所示: |dir names |subdir names | |:--------------------|:--------------------| | | |
knitr::kable
处理它,用rmarkdown
生成一个漂亮的.html
因此,结果应大致如下所示:
|dir names |subdir names |
|:--------------------|:--------------------|
| | |
| DIR_1 | SUBDIR_1 |
| | SUBDIR_2 |
| | SUBDIR_3 |
| DIR_2 | SUBDIR_1 |
| | SUBDIR_2 |
最小示例:
这就是我到目前为止取得的成绩:
# Create directories
dir.create("DIR_1")
dir.create("DIR_2")
# Create subdirectories
dir.create("./DIR_1/SUBDIR_1")
dir.create("./DIR_1/SUBDIR_2")
dir.create("./DIR_1/SUBDIR_3")
dir.create("./DIR_2/SUBDIR_1")
dir.create("./DIR_2/SUBDIR_2")
library("knitr")
kable(list.dirs(path=".",
recursive = TRUE,
full.names = FALSE),
col.names = c("dirs & subdirs mixed"))
|dirs & subdirs mixed |
|:--------------------|
| |
|DIR_1 |
|DIR_1/SUBDIR_1 |
|DIR_1/SUBDIR_2 |
|DIR_1/SUBDIR_3 |
|DIR_2 |
|DIR_2/SUBDIR_1 |
|DIR_2/SUBDIR_2 |
附加问题:
如何添加包含每个子目录中存储的所有文件名的第三列?基于,以下代码生成给定目录中所有目录和文件的表:
```{r setup, echo = FALSE, results = 'hide', warning = FALSE}
library(stringr)
lapply(X = c("demo", "demo/DIR_1", "demo/DIR_2", "demo/DIR_1/SUBDIR_1", "demo/DIR_1/SUBDIR_2", "demo/DIR_1/SUBDIR_3", "demo/DIR_2/SUBDIR_1", "demo/DIR_2/SUBDIR_2"),
FUN = dir.create)
file.create("demo/DIR_2/SUBDIR_2/file1.txt")
file.create("demo/DIR_2/SUBDIR_2/file12.txt")
```
```{r}
paths <- list.files(path = "demo/", include.dirs = TRUE, recursive = TRUE)
mytable <- str_split_fixed(paths, pattern = "/", n = str_count(paths, "/") + 1)
colnames(mytable) <- paste("Level", seq(ncol(mytable)))
knitr::kable(mytable)
```
您是只对两个级别(dir和subdir)感兴趣,还是对在“subdirs”中使用“subsubdirs”的任意深度嵌套感兴趣?好吧,一个可以处理深度嵌套(>2个级别)的解决方案会很好。使用
list.files
和参数include.dirs=TRUE
而不是list.dirs
。然后您可以使用类似于stringr::str_split_fixed(FL,“/”,n)
的内容拆分目录,其中FL
是文件列表,n
是嵌套目录的最大数量。要获取文件名,只需使用basename(数据框)
即可,要获取目录名,请使用dirname()
@nicola你会根据你的建议发布答案吗?
|Level 1 |Level 2 |Level 3 |
|:-------|:--------|:----------|
|DIR_1 | | |
|DIR_1 |SUBDIR_1 | |
|DIR_1 |SUBDIR_2 | |
|DIR_1 |SUBDIR_3 | |
|DIR_2 | | |
|DIR_2 |SUBDIR_1 | |
|DIR_2 |SUBDIR_2 | |
|DIR_2 |SUBDIR_2 |file1.txt |
|DIR_2 |SUBDIR_2 |file12.txt |