2

我有来自我正在读入 R 的 PDF 文件的数据。

library(pdftools)
library(readr)
library(stringr)
library(dplyr)

results <- pdf_text("health_data.pdf") %>% 
  readr::read_lines()

当我用这个方法读入它时,会返回一个字符向量。给定列的多行信息分布在不同的行上(并非每个观察的所有列都有数据。

下面是一个可重现的示例:

ex_result <- c("03/11/2012 BES 3RD          BES inc and corp           no-            no- sale -",
  "           group with                           sale        no- sale",  
  "           boxes",                                                                   
  "03/11/2012 KRS six and    firefly                  45       mg/dL  100 - 200",        
  "           seven",                                                                   
  "03/11/2012 KRS core    ladybuyg            55       mg/dL  42 - 87")

我正在尝试使用read_fwfwith,fwf_widths因为我读到它可以处理多行输入,如果你给出多行记录的宽度。

ex_result_width <- read_fwf(ex_result, fwf_widths(
  c(10, 24, 16, 7, 5, 15,100), 
  c("date", "name","description", "value", "unit","range","ab_flag")))

我通过在控制台nchar中输入我在该列中看到的最长字符串来确定大小。

使用fwf_widths我可以通过在参数中定义 10 个字节来获取日期列width =,但是对于 NAME 列,如果我将其设置为 24 个字节,它会返回串联的列而不是行拆分以解释多行,然后级联到另一个列现在有错误的数据,其余的在空间用完时被删除。

最终这是所需的输出:

desired_output <-tibble(
  date = c("03/11/2012","03/11/2012","03/11/2012"),
  name = c("BES 3RD group with boxes", "KRS six and seven", "KRS core"),
  description = c("BES inc and corp", "firefly", "ladybug"),
  value = c("no-sale", "45", "55"),
  unit = c("","mg/dL","mg/dL"),
  range = c("no-sale no-sale", "100 - 200", "42 - 87"),
  ab_flag = c("", "", ""))

我想看看:

  1. 如何fwf_widths识别多行文本和缺失的列?
  2. 有没有更好的方法来读取 pdf 文件来解释多行值和缺失列?(我正在关注本教程,但它似乎有一个更结构化的 pdf 文件)
4

0 回答 0