首页 > 解决方案 > 从多页PDF到DataFrame R

问题描述

我想创建一个包含 50 页的 pdf 的完整数据框。通过删除标题,我能够仅从一页生成一个数据框,但现在我需要为整个 50 页生成一个数据框,而忽略标题。这就是我所拥有的,文件看起来像这样。关于如何实现这一目标的任何帮助或建议?

library(pdftools)
library(sqldf)

sDirectorio = "/Users/muribe/Desktop"

archivoPDF = pdftools::pdf_text(file.path(sDirectorio,"centros_votacion.pdf"))

pagina = 26

unlist( strsplit(archivoPDF[pagina], split = c("\r\n")) )
         
vLineas

# Cada linea es un vector de caracteres
##class(vLineas[7])
##head(vLineas)
print(vLineas[7])

# Por lo que la labor se convierte en separar correctamente cada columna de datos

# Se define se conforma cada columna de datos
dfDefinicionTabla = data.frame( Orden  = 1:9,
                                Campo  = c("Codigo","Provincia","Canton","Distrito","JRVInicial","JRVFinal","TotalJRV","TipoCentro","CentroVotacion"),
                                Inicio = c(1,8,21,36,75,86,97,104,127),
                                Fin    = c(7,20,35,74,85,96,103,126,180),
                                Tipo   = c("numeric","character","character","character","numeric","numeric","numeric","character","character"),
                                stringsAsFactors = FALSE)

# Procesa cada una de las lineas de la pagina y los convierte en una fila de datos

dfTabla = data.frame()

for (linea in 7:length(vLineas)) {
  
  dfFila = data.frame(pagina, stringsAsFactors = FALSE)
  for (campo in 1:nrow(dfDefinicionTabla)){
    # campo = 2
    # Extrae cada uno de los campos de la linea  
    dfFila =cbind(dfFila, trimws(substr( vLineas[linea], 
                                         dfDefinicionTabla[campo,]$Inicio, 
                                         dfDefinicionTabla[campo,]$Fin), 
                                 which = "both") 
    )
    
  }
  # Ajusta los nombres de las columnas      
  colnames(dfFila)[2:(nrow(dfDefinicionTabla)+1)] = dfDefinicionTabla$Campo
  
  # Consolidando las filas en una sola tabla
  dfTabla = rbind(dfTabla, dfFila)
}
dfTabla ```

标签: rmergepdftools

解决方案


推荐阅读