七八年前我写过一个tcga数据库的临床信息整理的r代码,因为那个时候使用GDC官方认可的tcga数据库下载工具其实会给每个病人都下载一个独立的文件夹里面的都有一个独立的xml文件存储里面的病人的表型信息,如下所示:
那么就需要合并这些全部的病人的全部的xml文件啦,当初写的r代码如下所示:
# Load the packages required to read XML files.
library("XML")
library("methods")
dir='/Users/jmzeng/biosoft/gdc_client/miRNAseq/'
all_fiels=list.files(path = dir ,pattern='*.xml$',recursive=T)
cl = lapply(all_fiels
, function(x){
#x=all_fiels[1]
result <- xmlParse(file = file.path(dir,x))
rootnode <- xmlRoot(result)
xmldataframe <- xmlToDataFrame( rootnode[2] )
return(t(xmldataframe))
})
# 但是很多人在下面的代码会报错
cl_df <- t(do.call(cbind,cl))
save(cl_df,file = 'GDC_TCGA_LUAD_clinical_df.Rdata')
# 所以让对方把cl这个变量save后发邮件给我
save(cl,file ="cl.Rdata")
那个时候我测试这个代码的时候针对的癌症它里面的几百个病人的临床信息列是一致的,所以代码非常简略,虽然很多人确实看不懂 cl_df <- t(do.call(cbind,cl)) 代码,所以大家如果把这个代码移植到其它癌症, 就会遇到一个很尴尬的事情,有一些癌症里面的不同病人的临床信息列居然不一致。
恰好最后有粉丝最近在跟着我们的教程:小熊的2022新版TCGA教程 ,在临床信息整理环节就遇到了困难并且留言,我让他把他遇到的困难发邮件给我了,就是把cl这个变量save后发邮件给我。然后我检查了一下这个 cl 变量,确实比较奇怪,虽然我也不明白为什么同一个癌症不同病人的表型信息列不一致,但是这个其实就是数据分析里面的数据清洗步骤而已。简单的看了看,绝大部分病人都是68列信息:
> table(do.call(rbind,lapply(cl, dim))[,2])
68 69 70 71 72 73
359 25 11 11 4 2
所以,就需要把前面的不同病人的临床信息列进行一个简单的筛选即可;
load(file ="cl.Rdata")
table(do.call(rbind,lapply(cl, dim))[,2])
tmp = table(unlist(lapply(cl, colnames)))
ids = names(tmp[tmp==length(cl)])
cl = lapply(cl, function(x){x[,colnames(x) %in% ids] })
clinical = do.call(rbind,cl)
clinical[1:3,1:3]
就得到了一个标准的68列的临床信息矩阵啦。
每个癌症的临床信息肯定是不一样的, 但是我确实不明白为什么同一个癌症里面的不同病人临床信息也不一样?
我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是 jmzeng1314@163.com
如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:
We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.
十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。
联系客服