R语言tabulizer提取PDF表格后合并dataframe空行前连续行的方法
R语言合并PDF提取后拆分的多行数据解决方案
实现逻辑
- 先标记所有全空行(所有列内容均为空白、NA、空字符串的行)
- 以空行作为分组边界生成组ID,连续非空行会被划分到同一组
- 对每个组内的每一列,将非空内容拼接为单个字符串,过滤掉空行对应的无效分组即可得到合并后的整洁数据
完整代码
library(tidyverse) # 原有PDF表格提取代码保持不变 location <- "https://www.mofa.go.jp/announce/info/conferment/pdfs/2013_sp.pdf" out <- tabulizer::extract_tables(location) final <- do.call(rbind, out) final <- as.data.frame(final) %>% janitor::row_to_names(row_number = 2) %>% janitor::clean_names() # 合并拆分行的核心代码 merged_df <- final %>% # 标记全空行:所有列去除前后空格后为空或NA则判定为空行 mutate(is_blank = if_all(everything(), ~trimws(.x) %in% c(NA, ""))) %>% # 生成分组ID:每遇到一个空行,组ID加1 mutate(group_id = cumsum(is_blank)) %>% # 过滤掉空行本身,按组ID分组 filter(!is_blank) %>% group_by(group_id) %>% # 每组内的所有列,将非空内容用空格拼接 summarise(across(everything(), ~paste0(trimws(na.omit(.x)), collapse = " "))) %>% # 移除辅助列 ungroup() %>% select(-group_id)
适配说明
if_all逐行判断所有列是否均为空白,避免误判只有部分列为空的有效行- 用
cumsum(is_blank)生成的组ID天然适配末尾无空行的场景:最后一组连续非空行不会遇到后续空行,会被自动划为最后一个分组完整处理 - 拼接时先调用
na.omit跳过NA值,trimws去除内容前后多余空格,避免拼接结果出现多余空白
内容的提问来源于stack exchange,提问作者anpami
相关产品推荐
相关产品推荐

