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

R语言PDF解析后文本无法拆分为列的问题解决

PDF文本拆分数据框列的问题解决

问题背景

已将PDF转为文本,提取到目标行"TRIGLYCERIDES SERUM 115.3 Normal : Upto 150 Border Line mg/dl",通过strsplit(" +")拆分后得到三部分内容,但转成数据框时遇到两个问题:

  1. 使用read.csv得到0行结果
  2. 使用separate_wider_delim报错

解决方法1:修复read.csv返回0行的问题

问题原因

read.csv默认将第一行识别为表头,而我们的字符串是唯一的数据行,导致被误判为表头,没有数据行返回。

修正代码

pdf_rowwise[[4]][6: length(pdf_rowwise[[4]])] |>
  strsplit("    +") |>
  Filter(f = \(x) length(x) == 3) |>
  lapply(paste, collapse = "|") |>
  do.call(what = "c") |>
  read.csv(text = _, check.names = FALSE, sep = "|", header = FALSE, col.names = c("Test Name", "Result", "Unit"))

关键修改

  • 添加header = FALSE:告诉read.csv第一行是数据而非表头
  • 指定col.names:设置数据框的列名

解决方法2:修复separate_wider_delim的报错问题

问题原因

separate_wider_delim必须明确指定要拆分的列,原代码未提供cols参数导致报错。

修正代码(显式列名)

pdf_rowwise[[4]][6: length(pdf_rowwise[[4]])]  %>% 
  strsplit("    +") %>% 
  Filter(f = \(x) length(x) == 3) %>% 
  lapply(paste, collapse = "|")  %>%  
  do.call(what = "c") %>% 
  data.frame(Test_String = .) %>% # 给单列命名,便于指定拆分目标
  separate_wider_delim(cols = Test_String, delim = "|",
                       names = c("Test Name","Result","Unit"))

简化写法(自动识别单列)

pdf_rowwise[[4]][6: length(pdf_rowwise[[4]])]  %>% 
  strsplit("    +") %>% 
  Filter(f = \(x) length(x) == 3) %>% 
  lapply(paste, collapse = "|")  %>%  
  do.call(what = "c") %>% 
  data.frame() %>%
  separate_wider_delim(cols = everything(), delim = "|",
                       names = c("Test Name","Result","Unit"))

关键修改

  • 添加cols参数:指定要拆分的列(everything()选中所有列,这里即唯一的一列)

更简洁的替代方案

跳过拼接为|分隔字符串的步骤,直接将拆分后的列表转为数据框:

pdf_rowwise[[4]][6: length(pdf_rowwise[[4]])] %>%
  strsplit("    +") %>%
  Filter(f = \(x) length(x) == 3) %>%
  do.call(rbind, .) %>%
  as.data.frame(stringsAsFactors = FALSE) %>%
  setNames(c("Test Name", "Result", "Unit"))

说明

  • do.call(rbind, .)将列表转为矩阵,直接适配数据框结构
  • setNames直接设置列名,步骤更高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:03:19