如何用docxtractr按Word文档表格数量子集化数据框?
按Word文档表格数量分类提取表格
你已经能通过lapply(file_path, function(x) docx_tbl_count(read_docx(x)))统计每个文档的表格数,接下来可以按以下步骤实现按表格数子集化:
步骤1:整理文件路径与表格数的对应关系
先把每个文件的路径和对应的表格数整理成数据框,方便后续分组操作:
# 生成包含文件路径和对应表格数的数据框 tbl_counts <- data.frame( file_path = file_path, table_count = sapply(file_path, function(x) docx_tbl_count(read_docx(x))) )
步骤2:按表格数分组提取并合并表格
利用dplyr的分组功能,对不同表格数的文档分别提取表格,生成对应的数据框:
library(dplyr) library(docxtractr) # 按表格数分组 file_groups <- tbl_counts %>% group_split(table_count) # 遍历每个分组,提取表格并生成df4、df5... for (group in file_groups) { # 获取当前分组的表格数 current_count <- unique(group$table_count) # 提取该组所有文档的表格 all_tables <- lapply(group$file_path, function(path) { doc <- read_docx(path) # simplify=TRUE会把表格转为数据框,若需保留原格式可设为FALSE docx_extract_all_tbls(doc, simplify = TRUE) }) # 合并同组内的所有表格(假设同组文档的表格结构一致,按行合并) combined_df <- do.call(rbind, unlist(all_tables, recursive = FALSE)) # 赋值给对应的df变量,比如表格数为4则生成df4 assign(paste0("df", current_count), combined_df) }
注意事项
- 如果同组内不同文档的表格结构不一致,直接
rbind会报错,此时可以选择保留列表形式,或者先统一表格结构再合并。 - 若不需要合并表格,只想保留每个文档的表格列表,可去掉
do.call(rbind, ...)这一步,直接把all_tables赋值给对应变量。
内容的提问来源于stack exchange,提问作者Jhin Tonic
相关产品推荐
相关产品推荐

