0

我对 R 很陌生——但现在花了几天时间拼凑(感谢堆栈交换社区)我需要的代码,以完成我想要做的事情:从头到尾,我使用的是 Tabulizer 包将 pdf 表处理为 R。我正在努力解决数字的错误聚合(关闭 pdf)以及如何有效地将它们分成适当的列。

这是 Tabulizer 输出中相关列的子集:

'data.frame':   26 obs. of  3 variables:
 $ X1: Factor w/ 29 levels "Region A","Region B",..: 22 2 3 4 5 6 7 8 9 10 ...
 $ X2: Factor w/ 29 levels "1 192 36,7","102 4,6",..: 21 20 4 1 23 10 18 14 26 17 ...
 $ X3: Factor w/ 29 levels "1 144 48,2","1 800 55, 8",..: 24 6 7 2 23 11 22 17 26 21 ...

更具体地说:“1 800 55, 8”是“1800”和“55.8”的错误聚合,并且在整个列中都会出现这种情况(应该是两个)。

我正在使用 gsub(在循环中)将小数逗号替换为小数点,并删除所述小数点周围不需要的空格。

for (i in 2:ncol(Tab)) { #some of the tables have multiple columns
  Tab[[i]] <- gsub(",", "\\.", Tab[[i]]) 
  Tab[[i]] <- gsub("\\. ", "\\.", Tab[[i]])
  Tab[[i]] <- gsub(" \\. ", "\\.", Tab[[i]])
}

这让我得到“1 800 55.8”,这更好但不是很好;第一个空格可能存在也可能不存在,或者可能有两个,具体取决于数字的大小 - 空格是原始文档中千位分隔符的替代。

我想将该列转换为适当的两个新列。我尝试使用 stringi::word 来隔离“最后一个单词”,并尝试匹配|从原始列中提取该输出(55.8),留下“1 800”,然后可以对其进行修剪,但我没有知道怎么。也没有与该解决方案结婚 - 愿意学习其他方式。非常感激。

4

1 回答 1

2

您可以尝试使用 extract_tables 中的 columns 参数来指定分隔列的位置。我使用它的方式是先使用:

tabulizer::locate_areas(FilePath)

这将允许您获取桌子的位置。然后使用左右坐标来猜测列在哪里分离并在提取表格时使用它

tabulizer::extract_tables(FilePath, pages = 1, guess = FALSE  
                            , columns = list(c(300))))

您还可以通过添加“区域”参数来指定表格的位置:

tabulizer::extract_tables(FilePath, pages = 1, guess = FALSE  
                         , area = list(c(265, 33, 460,400))
                            , columns = list(c(300))))
于 2018-11-06T20:13:48.583 回答