Awsome pytanie, zastanawiałem się nad tym samym ostatnio, dzięki!
Zrobiłem to, z tabulizer jak sugeruje również @hrbrmstr. Jeśli używasz już wersji R 3.4.0, zapewniam następujące rozwiązanie. Zainstaluj trzy pakiety w określonej kolejności:
install.packages("rJava")
library(rJava) # load and attach 'rJava' now
install.packages("devtools")
devtools::install_github("ropensci/tabulizer", args="--no-multiarch")
Teraz jesteś gotowy, aby wyodrębnić tabele z raportów PDF.
library(tabulizer)
# specify an example and load it into your workspace
report <- "http://www.stat.ufl.edu/~athienit/Tables/Ztable.pdf"
lst <- extract_tables(report, encoding="UTF-8")
# peep into the doc for further specs (page, location etc.)!
# after examing the list you want to do some tidying
# 1st delete blank columns
lst[[1]] <- lst[[1]][, -3]
lst[[2]] <- lst[[2]][, -4]
# 2nd bind the list elements, if you want and create a df...
table <- do.call(rbind, lst)
table <- as.data.frame(table[c(2:37, 40:nrow(table)), ],
stringsAsFactors=FALSE) # ...w/o obsolete rows
# 3rd take over colnames, cache rownames to vector
colnames(table) <- table[1, ]
rn <- table[2:71, 1]
table <- table[-1,-1] # and bounce them out of the table
# 4th I'm sure you want coerce to numeric
table <- as.data.frame(apply(table[1:70,1:10], 2,
function(x) as.numeric(as.character(x))))
rownames(table) <- rn # bring back rownames
table # voilà
Mam nadzieję, że to działa dla Ciebie.
Ograniczenia: Oczywiście tabela w tym przykładzie jest bardzo prosta i może trzeba poeksperymentować z gsub
, stringr
tidyr
i tego rodzaju rzeczy.
Pakiet 'pdftables': https://cran.r-project.org/web/packages/pdftables/pdftables.pdf –
tabulizer (ropensci github) – hrbrmstr