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_id
exp = 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$SYMBOL
exp = 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检查一下呗~