如何在R中批量导入、处理多个PDF文件并合并为DataFrame?
批量导入并处理多个PDF文件生成目标DataFrame
步骤1:准备PDF链接列表
先把所有需要处理的PDF链接存入一个向量:
pdf_links <- c( "https://www.website.com/files/file1.pdf", "https://www.website.com/files/file2.pdf", "https://www.website.com/files/file3.pdf" )
步骤2:封装单个PDF的处理逻辑
将你针对单个PDF的清洗流程封装成函数,方便批量调用:
process_single_pdf <- function(link) { # 读取PDF文本内容 raw_text <- pdftools::pdf_text(link) df <- data.frame(text = raw_text) # 执行清洗处理 df_clean <- df %>% mutate( Date = stringr::str_sub(text[1], start = 10, end = 18), text = stringr::str_squish(text) ) %>% tail(-2) %>% group_by(Date) %>% summarise(text = paste(text, collapse = " ")) return(df_clean) }
步骤3:批量处理并合并结果
推荐用purrr包的map_dfr函数,它会自动将每个PDF处理后的小DataFrame合并成最终的大DataFrame,代码更简洁高效:
library(dplyr) library(purrr) library(stringr) library(pdftools) # 批量处理所有PDF并合并结果 final_df <- map_dfr(pdf_links, process_single_pdf)
如果不习惯purrr,也可以用for循环实现:
library(dplyr) library(stringr) library(pdftools) # 初始化空的结果DataFrame final_df <- data.frame(Date = character(), text = character(), stringsAsFactors = FALSE) # 遍历每个链接处理并合并 for(link in pdf_links) { processed_df <- process_single_pdf(link) final_df <- rbind(final_df, processed_df) }
注意事项
- 确保所有PDF的日期位置统一(即
str_sub的start和end参数对所有文件有效),若存在格式不一致的PDF,需调整日期提取逻辑。 - 处理大量PDF时,
map_dfr的效率优于for循环。
内容的提问来源于stack exchange,提问作者Artur Vidaurre de Almeida
相关产品推荐
相关产品推荐

