好好的表格被放进了pdf,肿么办
2021-06-10 本文已影响0人
小洁忘了怎么分身
0.解决的问题
0.1 有些数据的有用信息表格,存放在正文和附件里,以pdf格式提供。就不方便提取,在此记录从pdf里提取表格的办法。
0.2 很多欧洲国家的小数点是逗号,比如"3.52"
会写成"3,52"
,除了自己写代码处理字符串,也可以使用哈德雷大神的现成函数parse_double
。
1.提取表格
GSE16011的参考文献附件,下面直接是pdf的网址,也省得下载再读取咯。
附表1是接近300个病人的各种信息,占了前10页。全部提取出来是组织成了一个列表的形式,把列表里的每个数据组合起来即可。
library(tabulizer)
f <- "https://cancerres.aacrjournals.org/content/canres/suppl/2009/11/16/0008-5472.CAN-09-2307.DC1/stabs_1-6.pdf"
re <- extract_tables(f,pages = 1:10) #提取前10页的表格。
str(re)
## List of 10
## $ : chr [1:32, 1:10] "Database\rnumber" "7" "8" "9" ...
## $ : chr [1:32, 1:10] "92" "98" "99" "101" ...
## $ : chr [1:31, 1:10] "155" "157" "158" "161" ...
## $ : chr [1:32, 1:10] "203" "204" "206" "207" ...
## $ : chr [1:29, 1:10] "256" "257" "258" "259" ...
## $ : chr [1:30, 1:10] "336" "337" "343" "344" ...
## $ : chr [1:29, 1:10] "425" "427" "428" "431" ...
## $ : chr [1:33, 1:10] "483" "485" "487" "488" ...
## $ : chr [1:32, 1:10] "565" "566" "567" "568" ...
## $ : chr [1:5, 1:10] "704" "709" "710" "711" ...
re = do.call(rbind,re)
re[1:4,1:4]
## [,1] [,2]
## [1,] "Database\rnumber" "Gender"
## [2,] "7" ""
## [3,] "8" "Female"
## [4,] "9" "Male"
## [,3]
## [1,] "Reviewed histological\rdiagnosis"
## [2,] "control"
## [3,] "OD (grade III)"
## [4,] "OD (grade III)"
## [,4]
## [1,] "Age at\rdiagnosis"
## [2,] ""
## [3,] "44,57"
## [4,] "28,69"
2.提取后的调整
上面的提取结果有3个问题
-
第一行的内容本该是列名,而没有被正确设为列名
-
存在空的格子
-
有一些列本该是数值型数据,现在都是字符串型,且有逗号作为小数点的数据
改造问题数据行动
colnames(re) = re[1,]
re = re[-1,]
re = data.frame(re)
re[re==""]=NA
library(readr)
re$Survival..years. = parse_double(re$Survival..years.,locale = locale(decimal_mark = ","))
re$Age.at.diagnosis = parse_double(re$Age.at.diagnosis,locale = locale(decimal_mark = ","))
多说一句,空格子对应的内容就是空字符串"",他没有内容,但他有字符串属性,转换为别的类型时会变成NA。我习惯主动把他全变成NA,不然后续的分析,空字符串也算一种取值。举个栗子:
table(c("","","Alive","Alive","Dead","Dead","Dead"))
##
## Alive Dead
## 2 2 3