icgc数据搜索方式:
根据路径一步一步点下来,最后会到这个界面
一共需要下载三个文件
(1)donor.tsv.gz 里面包含生存信息
(2)exp_seq.tsv.gz 里面包含表达矩阵
(3)specimen.tsv.gz 里面包含样本来自肿瘤还是癌旁
第一次接触ICGC,我的思路大概是这样的(我是为了比较肿瘤异质性,所以normal样本不在我的考虑范围内):
首先根据specimen里面的信息提取肿瘤样本的specimen_ID,然后在exp里根据specimen_ID找到对应的donor_ID,提取生存信息,最后整理表达矩阵,提取三者公共的部分进行下一步研究。
(一)安装R包
library(readr)library(dplyr)library(tidyverse)library(tibble)
(二)提取癌症的specimen_ID & donor_ID
因为第一次搞,对这个数据库还不熟悉,做的有点复杂了
这一部分就是说,有的病人提供了不止一个样本,还提供了癌旁样本,但是做生存分析不需要癌旁的,所以必须要把肿瘤的specimen_ID提取出来,但是生存信息的文件里只有donor_ID,所以我干脆把这俩都提取了出来,然后在生存文件和表达矩阵里取子集(有点绕,多想想)
disease = "KIRC"specimen = read_tsv('icgc/specimen.RECA-EU.tsv.gz')specimen_ID = specimen[specimen$specimen_type == "Primary tumour - solid tissue",]$icgc_specimen_idexp = read_tsv('icgc/exp_seq.RECA-EU.tsv/exp_seq.RECA-EU.tsv')exp = exp[exp$icgc_specimen_id %in% specimen_ID,]donor_ID = unique(exp$icgc_donor_id)donor = read_tsv('icgc/donor.RECA-EU.tsv.gz')donor = donor[donor$icgc_donor_id %in% donor_ID,]donor = donor[,c("icgc_donor_id","donor_vital_status","donor_survival_time")]donor = column_to_rownames(donor, "icgc_donor_id")length(unique(exp$icgc_donor_id))as.numeric(table(exp$icgc_donor_id))
(三)表达矩阵整理
icgc是长矩阵的形式储存信息,所以基因都保存到了一列,要把它们整理为常见的形式,无脑运行下面的
exp = exp[,c("icgc_donor_id", "gene_id", "normalized_read_count" )]exp = exp %>% group_by(icgc_donor_id, gene_id) %>%summarise_all(max) %>%pivot_wider(names_from = "icgc_donor_id", values_from = "normalized_read_count") %>%summarise_all(function(x){ifelse(is.na(x),0,x)})
(四)基因ID转换
老生常谈了
library(org.Hs.eg.db)gene_symbol = select(org.Hs.eg.db,keys = exp$gene_id,columns = "SYMBOL",keytype = "ENSEMBL")gene_symbol = na.omit(gene_symbol)exp = exp[match(gene_symbol$ENSEMBL, exp$gene_id),]exp$gene_id = gene_symbol$SYMBOLexp = exp[!duplicated(exp$gene_id),]exp = tibble::column_to_rownames(exp, "gene_id")
(五)临床信息
我用ICGC只是为了做验证,所以只提取了生存结局和时间两列
cl = donor[match(colnames(exp),rownames(donor)),]colnames(cl) = c("status", "time")cl$status = ifelse(cl$status == "alive", 0, 1)save(exp, cl, file = paste0("icgc/", disease, "_exp_cl.Rdata"))
第一次整理ICGC,不敢打包,以后熟悉了,再补上~
一步一步下来,应该不会错
多用table检查一下呗~
