好好的表格被放进了pdf,肿么办
测试开头

今天是生信星球陪你的第822天
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
测试结尾



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] "Databasernumber" "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,] "Databasernumber" "Gender"
## [2,] "7" ""
## [3,] "8" "Female"
## [4,] "9" "Male"
## [,3]
## [1,] "Reviewed histologicalrdiagnosis"
## [2,] "control"
## [3,] "OD (grade III)"
## [4,] "OD (grade III)"
## [,4]
## [1,] "Age atrdiagnosis"
## [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
我的个人文章从简书全部迁移到了语雀,搜小洁忘了怎么分身即可找到,点击阅读原文可以跳转。如果因为不会R语言导致代码完全看不懂,可以看看下面的几个课程⏬都是滚动开班的。
插个小广告! 生信零基础入门学习小组 生信入门班(四周线上直播课,长期开班) 数据挖掘班(医生/医学生首选,三周线上直播课,长期开班) 生信星球答疑公告
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!