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

R语言中合并两行:将无数字前缀行内容拼至上一行指定列

处理OCR跨行子标题的R解决方案

针对OCR归档中遇到的子标题跨行问题(非标题行需拼接至上一行标题),可以通过以下两种方式实现:

方法一:使用dplyr包(简洁直观)

library(dplyr)

# 原始数据
df <- data.frame(header = c("1. hello", "2. halo", "hallow"), line_id = c(28:30), stringsAsFactors = FALSE)

# 标记标题行并创建分组
df_processed <- df %>%
  mutate(
    is_header = grepl("^\\d+\\.", header), # 判断是否为开头带数字+点的标题行
    group = cumsum(is_header) # 为每个标题及后续跨行内容分配分组
  )

# 按分组拼接内容并提取原始行号
df_clean <- df_processed %>%
  group_by(group) %>%
  summarise(
    header = paste(header, collapse = " "),
    line_id = first(line_id)
  ) %>%
  ungroup() %>%
  select(-group)

# 输出结果
df_clean

方法二:基础R实现(无需额外依赖)

# 原始数据
df <- data.frame(header = c("1. hello", "2. halo", "hallow"), line_id = c(28:30), stringsAsFactors = FALSE)

# 定位所有标题行的位置
header_rows <- which(grepl("^\\d+\\.", df$header))
# 为每行分配对应的分组
groups <- findInterval(seq_len(nrow(df)), header_rows)

# 遍历分组处理内容
df_clean <- do.call(rbind, lapply(unique(groups), function(g) {
  group_data <- df[groups == g, ]
  data.frame(
    header = paste(group_data$header, collapse = " "),
    line_id = group_data$line_id[1],
    stringsAsFactors = FALSE
  )
}))

# 输出结果
df_clean

核心逻辑说明

  • 用正则表达式^\\d+\\.匹配开头为数字加英文点的标题行;
  • 通过分组将每个标题行与其后续的跨行内容绑定;
  • 对每个分组内的header字段进行字符串拼接,保留分组内第一个line_id作为原始行标识。

内容的提问来源于stack exchange,提问作者stacksterppr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:05:22