icgc数据搜索方式:
image.png
根据路径一步一步点下来,最后会到这个界面
一共需要下载三个文件
(1)donor.tsv.gz 里面包含生存信息
(2)exp_seq.tsv.gz 里面包含表达矩阵
(3)specimen.tsv.gz 里面包含样本来自肿瘤还是癌旁

第一次接触ICGC,我的思路大概是这样的(我是为了比较肿瘤异质性,所以normal样本不在我的考虑范围内):
首先根据specimen里面的信息提取肿瘤样本的specimen_ID,然后在exp里根据specimen_ID找到对应的donor_ID,提取生存信息,最后整理表达矩阵,提取三者公共的部分进行下一步研究。

(一)安装R包

  1. library(readr)
  2. library(dplyr)
  3. library(tidyverse)
  4. library(tibble)

(二)提取癌症的specimen_ID & donor_ID

因为第一次搞,对这个数据库还不熟悉,做的有点复杂了
这一部分就是说,有的病人提供了不止一个样本,还提供了癌旁样本,但是做生存分析不需要癌旁的,所以必须要把肿瘤的specimen_ID提取出来,但是生存信息的文件里只有donor_ID,所以我干脆把这俩都提取了出来,然后在生存文件和表达矩阵里取子集(有点绕,多想想)

  1. disease = "KIRC"
  2. specimen = read_tsv('icgc/specimen.RECA-EU.tsv.gz')
  3. specimen_ID = specimen[specimen$specimen_type == "Primary tumour - solid tissue",]$icgc_specimen_id
  4. exp = read_tsv('icgc/exp_seq.RECA-EU.tsv/exp_seq.RECA-EU.tsv')
  5. exp = exp[exp$icgc_specimen_id %in% specimen_ID,]
  6. donor_ID = unique(exp$icgc_donor_id)
  7. donor = read_tsv('icgc/donor.RECA-EU.tsv.gz')
  8. donor = donor[donor$icgc_donor_id %in% donor_ID,]
  9. donor = donor[,c("icgc_donor_id",
  10. "donor_vital_status",
  11. "donor_survival_time")]
  12. donor = column_to_rownames(donor, "icgc_donor_id")
  13. length(unique(exp$icgc_donor_id))
  14. as.numeric(table(exp$icgc_donor_id))

(三)表达矩阵整理

icgc是长矩阵的形式储存信息,所以基因都保存到了一列,要把它们整理为常见的形式,无脑运行下面的

  1. exp = exp[,c("icgc_donor_id", "gene_id", "normalized_read_count" )]
  2. exp = exp %>% group_by(icgc_donor_id, gene_id) %>%
  3. summarise_all(max) %>%
  4. pivot_wider(names_from = "icgc_donor_id", values_from = "normalized_read_count") %>%
  5. summarise_all(function(x){ifelse(is.na(x),0,x)})

(四)基因ID转换

老生常谈了

  1. library(org.Hs.eg.db)
  2. gene_symbol = select(org.Hs.eg.db,
  3. keys = exp$gene_id,
  4. columns = "SYMBOL",
  5. keytype = "ENSEMBL")
  6. gene_symbol = na.omit(gene_symbol)
  7. exp = exp[match(gene_symbol$ENSEMBL, exp$gene_id),]
  8. exp$gene_id = gene_symbol$SYMBOL
  9. exp = exp[!duplicated(exp$gene_id),]
  10. exp = tibble::column_to_rownames(exp, "gene_id")

(五)临床信息

我用ICGC只是为了做验证,所以只提取了生存结局和时间两列

  1. cl = donor[match(colnames(exp),rownames(donor)),]
  2. colnames(cl) = c("status", "time")
  3. cl$status = ifelse(cl$status == "alive", 0, 1)
  4. save(exp, cl, file = paste0("icgc/", disease, "_exp_cl.Rdata"))

第一次整理ICGC,不敢打包,以后熟悉了,再补上~
一步一步下来,应该不会错
多用table检查一下呗~