一文学会ICGC数据库使用
大家好,我是阿琛。俗话说,巧妇难为无米之炊。除了我们所熟知的TCGA数据库和GEO数据库,我们可以见到另一个强大的肿瘤研究数据库,即ICGC数据库。今天,我们一起来看下ICGC数据库的使用方法和部分数据清洗内容。
首先,简单介绍一下这个优秀的数据库。ICGC数据库(https://daco.icgc.org/),即国际肿瘤基因组协作组(International Cancer Genome Consortium),收集了50种不同癌症类型或不同亚型的肿瘤数据,其中包括基因表达数据,体细胞突变数据(单核苷酸突变和拷贝数变异),以及相关的临床数据等。当然,在ICGC数据集中,同样囊括了TCGA数据库和TARGET数据库中的相关数据。在使用过程中,我们往往把TCGA数据库分析得到的模型或者结论,使用ICGC数据库中的数据进行外部验证拓展。
下面,我们一起来看下ICGC数据库的使用方法。
1.ICGC表达数据的下载
首先,我们先来看下如何下载其中的数据。提醒一下,这个网站对网络可能会有一点点的要求,使用过程中耐心等待一下。

1.1 点击ICGCData Protal进入数据储存地址

1.2 点击DCC Data Release,查看数据更新版本信息


1.3 在此,我们可以看到不同时间更新的数据版本信息;在使用过程中,我们一般选择最新版本的数据来进行后续的分析。点击current,查看最新版本数据
1.4 点击project,进入数据集存储界面
在该页面,可看到其中包含的各个项目内容,根据研究的疾病类型及相关具体需求来进行选择;
接下来,我们选择其中一个数据集中的数据内容来进行接下来的演示和整理,来自韩国的乳腺癌数据集。
在该数据集中,包括基因表达exp_seq.BRCA-KR.tsv.gz,临床数据specimen.BRCA-KR.tsv.gz,Somatic突变数据simple_somatic_mutation.open.BRCA-KR.tsv.gz,以及一些其他的相关病史,包括家族史,手术史,接触史等等。下载基因表达文件和临床数据文件用于后续的分析使用。
2.基因表达数据清洗
在数据整理前,我们先来看看下载得到的基因表达文件。可以看到,该表达文件和我们以前常规使用的表达矩阵并不一样;其中,每一行都代表一个病人中一个基因的表达值。
同时,在临床数据中,展示了每个样品对应的患者来源(specimens)和组织样品类型(Type)。
接下来,我们将对这两个文件进行清洗,以得到平时使用的表达矩阵格式。
2.1 表达数据的提取
rm(list=ls()) #清空环境变量options(stringsAsFactors = F)library(data.table)exp <- data.table::fread("exp_seq.BRCA-KR.tsv",data.table = F)exp <- exp[,c(1,3,8,9)]

首先,将exp_seq表达文件读取进来;由于文件相对较大,在此我们选择使用data.table包中的fread()函数来快速读取大文件内容。同时,根据需要,我们只提取包含样品信息和基因表达信息的列。可以看到,最终得到一个由1336550行组成的数据框。
head(exp)

#查看样品数量length(unique(exp$icgc_donor_id))

随后,经统计,其中包含了50个不同的样品数量。
2.2样品信息的读取
cli <- data.table::fread(file="specimen.BRCA-KR.tsv",data.table = F)library(tidyverse)cli_2 <- cli %>% mutate(specimen_type = ifelse(specimen_type=="Primary tumour - solid tissue","C","N")) %>%select(1,5,7)

整理好表达数据后,我们接着对临床信息进行提取和整理。并且,根据样品的不同来源,我们分别对其重新命名,即肿瘤组(C)和正常组(N)。
str(cli_2)

结果显示,一共包含100个不同的样品信息,其中spcimen_type为分组信息。
2.3 将两文件合并
exp_max <- merge(exp, cli_2, by="icgc_specimen_id",all.x=TRUE)

根据icgc_specimen_id信息,使用merge()函数将表达文件和临床信息文件进行合并。
rt <- exp_max[,c(1,5,6,3,4)] %>% unite(sample_id,icgc_specimen_id,icgc_donor_id.y,specimen_type,sep="-")

随后,我们进一步使用unite()函数将几列信息内容合并成一列。其中,关于unit()函数的使用原理,与paste0()函数类似,只是前者针对多个列内容的合并。
2.4构建表达矩阵
exp_matrix <- rt %>% group_by(sample_id) %>% mutate(id=1:n()) %>% spread(sample_id,normalized_read_count) %>%select(-"id")

最后,使用spread()函数,将表达数据进行拆分,最终得到我们常见的表达矩阵格式。
##保存结果write.table(exp_matrix, file = "ICGC.BRCA_KR.exp.txt", sep = "\t", row.names = F, quote = F)

将最终得到的表达矩阵进行保存,即可用于后续分析使用。
这样,从数据的下载到清洗,整个步骤都完成了~接下来的分析使用,就可以参考测序数据的分析过程,快速进行差异分析,功能聚类等一系列的标准操作。
回复“阿琛47”获得本次的代码和示例数据~
系列传送门
R语言小白入门课|一刻钟带你学会R数据转化
END

撰文丨阿   琛
排版丨四金兄
值班 | 火   火

主编丨小雪球
长按识别二维码免费包邮领取!
继续阅读
阅读原文