Extractor de tablas de pdf con R
2026-05-12
Extractor de tablas de pdf con R
En ciertos documentos pdf aparecen tablas de datos. Y yo necesito analizarlas. En este ejemplo la tabla está publicada en tres páginas consecutivas de un documento pdf. Mostramos la primera página.
Para extraer esta información existen paquetes de R que usan Java o se conectan con proveedores de internet. Aquí presento una versión que funciona relativamente bien para tablas sencillas. La función pdf_table_page se define en pdftable.R.
library(data.table) library(pdftools) source("https://torres.epv.uniovi.es/centon/graphics/pdftable.R") ## Descargamos un documento pdf. La tabla que nos interesan está publicada entre las páginas 22, 23 y 24. Las tenemos que extraer y juntar. pdffile <- "prevision.pdf" url <- "https://socialasturias.asturias.es/documents/1536816/0/PREVISIO%CC%81N-DEMANDA-CUIDADOS-RESIDENCIALES-PERSONAS-MAYORES.pdf/79b87bce-f490-ed33-d387-e2352b98a5ba?t=1736504397392" download.file(url, destfile = pdffile, method="curl") ## Visualizamos una página image <- pdf_render_page(pdffile,page=22,dpi=72,numeric=TRUE) plot_array(image) ## Extraemos la tabla principal de cada una de estas páginas. ldt <- lapply(22:24, function(page) pdf_table_page(pdffile, page, alltables= FALSE, # Solo la tabla principal de cada página gaprows = NULL, # Puntos de separación entre líneas. Prueba con gaprows =4L, 5L o 6L, o NULL para automático. gapcolumns = 6L, verbose = 0L)) rbindlist(ldt) # Las juntamos
pagina fila columna_1 columna_2 columna_3 columna_4 columna_5
<int> <int> <char> <int> <int> <num> <num>
1: 22 5 Boal 68 77 11.5 31.3
2: 22 6 Castropol 142 18 13.4 4.7
3: 22 7 Coaña 148 41 15.8 12.9
4: 22 8 El Franco 187 96 17.9 23.3
5: 22 9 Grandas de Salime 34 18 11.9 14.5
6: 22 10 Illano 120 82 77.9 115.5
7: 22 11 Valdés 310 313 8.2 21.1
8: 22 12 Navia 398 70 18.5 9.0
9: 22 13 Pesoz 111 32 194.7 188.2
10: 22 14 San Martín de Oscos 140 76 91.5 133.3
11: 22 15 Santa Eulalia de Oscos 55 14 37.2 20.3
12: 22 16 San Tirso de Abres 72 34 46.5 52.3
13: 22 17 Tapia de Casariego 151 34 13.7 8.0
14: 22 18 Taramundi 99 44 37.5 41.9
15: 22 19 Vegadeo 77 29 6.6 6.8
16: 22 20 Villanueva de Oscos 79 36 76.0 83.7
17: 22 21 Villayón 50 13 10.5 7.2
18: 22 22 Total ÁREA I 1485 81 10.9 1.6
19: 22 23 Allande 71 50 11.0 18.2
20: 22 24 Cangas del Narcea 250 23 6.9 1.8
21: 22 25 Degaña 142 93 62.3 114.8
22: 22 26 Ibias 11 7 2.3 3.5
23: 22 27 Tineo 264 225 8.8 18.3
24: 22 28 Total ÁREA II 210 112 2.6 3.6
25: 22 29 Avilés 6520 4241 33.3 61.9
26: 22 30 Castrillón 3106 821 55.4 52.0
27: 22 31 Corvera de Asturias 2096 850 57.6 79.1
28: 22 32 Cudillero 54 78 3.4 13.1
29: 22 33 Gozón 559 126 19.1 12.3
30: 22 34 Illas 94 28 32.2 28.9
31: 22 35 Muros de Nalón 60 10 10.2 4.6
32: 22 36 Pravia 143 161 6.5 18.8
33: 22 37 Soto del Barco 182 0 16.3 0.0
34: 22 38 Total ÁREA III 12420 5817 33.1 45.9
35: 23 2 Belmonte de Miranda 36 50 6.0 20.5
36: 23 3 Bimenes 45 48 8.6 22.6
37: 23 4 Cabranes 12 26 3.6 16.5
38: 23 5 Candamo 14 26 2.1 10.5
39: 23 6 Grado 271 334 9.9 31.1
40: 23 7 Llanera 856 152 31.5 18.1
41: 23 8 Morcín 201 176 28.7 60.1
42: 23 9 Nava 127 70 9.7 15.1
43: 23 10 Noreña 226 61 21.4 16.3
44: 23 11 Oviedo 15154 3050 30.3 18.6
45: 23 12 Proaza 75 9 27.9 10.5
46: 23 13 Quirós 40 3 9.7 2.1
47: 23 14 Las Regueras 70 60 12.0 33.9
48: 23 15 Ribera de Arriba 101 76 22.9 43.9
49: 23 16 Riosa 192 157 36.5 78.9
50: 23 17 Salas 224 152 13.1 20.7
51: 23 18 Santo Adriano 89 37 92.7 100.0
52: 23 19 Sariego 108 48 31.2 36.6
53: 23 20 Siero 3068 913 27.9 25.2
54: 23 21 Somiedo 15 22 3.5 11.1
55: 23 22 Teverga 96 73 16.4 32.9
56: 23 23 Yernes y Tameza 83 36 207.5 300.0
57: 23 24 Total ÁREA IV 19987 4081 25.9 15.7
58: 23 25 Carreño 303 13 11.0 1.4
59: 23 26 Gijón 24210 7455 34.2 33.2
60: 23 27 Villaviciosa 42 350 1.0 24.0
61: 23 28 Total ÁREA V 24471 7092 31.5 28.5
62: 23 29 Amieva 72 11 29.8 11.0
63: 23 30 Cabrales 32 19 5.3 8.1
64: 23 31 Cangas de Onís 5 97 0.3 16.9
65: 23 32 Caravia 136 23 102.3 67.6
66: 23 33 Colunga 73 89 6.6 20.1
67: 23 34 Llanes 57 327 1.6 25.6
68: 23 35 Onís 57 20 23.4 19.0
69: 23 36 Parres 18 69 1.3 12.3
70: 23 37 Peñamellera Alta 65 12 32.0 15.0
71: 23 38 Peñamellera Baja 13 29 3.4 19.3
72: 23 39 Piloña 341 273 15.9 30.7
73: 23 40 Ponga 140 12 64.2 23.5
74: 24 2 Ribadedeva 98 17 20.0 9.3
75: 24 3 Ribadesella 211 68 13.4 11.9
76: 24 4 Total ÁREA VI 454 774 3.3 14.7
77: 24 5 Aller 6 250 0.2 20.1
78: 24 6 Lena 86 88 2.9 7.9
79: 24 7 Mieres 987 1211 9.4 30.7
80: 24 8 Total ÁREA VII 1079 1549 6.5 24.6
81: 24 9 Caso 11 60 1.9 30.3
82: 24 10 Langreo 513 327 5.1 9.5
83: 24 11 Laviana 570 260 17.2 22.9
84: 24 12 San Martín del Rey Aurelio 637 500 13.8 31.7
85: 24 13 Sobrescobio 67 38 28.8 38.8
86: 24 14 Total ÁREA VIII 1798 1065 9.6 16.5
87: 24 15 ASTURIAS 61904 18799 23.5 20.9
pagina fila columna_1 columna_2 columna_3 columna_4 columna_5