У меня есть PDF, которые я читаю в R. Я конвертирую их в data.frame
, используя tabluizer::extract_tables
PDF-файлы имеют 6 столбцов / переменных и могут иметь несколько страниц на документ ... хорошо, все заработало. То, что я хочу сделать, это добавить 7-й столбец для имени файла внутри моего цикла for, но не удается, когда я получаю ошибку:
Error in rbind(deparse.level, ...) : numbers of columns of arguments do not match
Вот мой код:
for(i in 1:length(pdf.list)){
print(paste("Reading - ", pdf.list[i]))
cur.doc <- extract_tables(pdf.list[i])
for(j in 1:length(cur.doc)){
cur.doc.page <- cur.doc[[j]]
df$FileName = pdf.list[i]
df <- as.data.frame(cur.doc.page)
documents <- rbind(documents, df)
}
}
Итак, я понял, что проблема в моем cbind (), но я не уверен, а) почему и б) как исправить. pdf.list[i]
дает текущее имя файла.
UPDATE
Это наконец-то сделал все ошибки
documents <- data.frame()
error.page.df <- data.frame()
for(i in 1:length(pdf.list)){
print(paste("Reading file -", pdf.list[i]))
cur.doc <- extract_tables(pdf.list[i])
print(paste("There are", length(cur.doc), "pages in the current file."))
for(j in 1:length(cur.doc)){
cur.doc.page <- cur.doc[j]
print(
paste(
"Reading page -"
, j
, "There are"
, ncol(as.data.frame(cur.doc.page))
, "columns."
)
)
df <- as.data.frame(cur.doc.page)
df <- df[-1, ]
df <- df[, colSums(df != "") != 0]
df$FileName <- pdf.list[i]
tmp.col.names <- c(
"V1","V2","V3","V4","V6","FileName"
)
try(colnames(df) <- tmp.col.names, silent = T)
possible.error <- try(rbind(documents, df))
if(isTRUE(class(possible.error)=="try-error")) {
print(
paste(
"Could not insert page"
, j
, "for file -"
, pdf.list[i]
)
)
error.msg <- paste(
"Could not insert page"
, j
, "for file -"
, pdf.list[i]
)
error.page.df <- rbind(error.page.df, error.msg)
next
} else {
documents <-rbind(documents, df)
possible.error <- NA
}
}
}