You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:54:04