本篇学习转录组差异分析的代码,以TCGA的CHOL疾病为例。用较为基础的代码学习,以便理解。后续再学习更流畅的方法
上一篇学习了怎么获取数据后,请将下载的文件放在工作目录下,下面开始代码学习环节
1.项目命名
TCGA的数据,统一叫TCGA-xxxx;非TCGA的数据随意起名
不要有特殊字符即可,文件名不能有空格,TCGA CHOL不行,TCGA-CHOL可以
proj = "TCGA-CHOL"
2.读取和整理数据
2.1 表达矩阵
dat = read.table("TCGA-CHOL.htseq_counts.tsv.gz",
check.names = F,#不要检查列名。如果检查,列名会变,对后续有影响
row.names = 1,#将第一列作为行名。第一列一般会有文字,如果不将其作为行名,表达矩阵就会掺入文字
header = T#同理,否则表达矩阵会掺入文字
)
#读取表达矩阵的时候,不推荐data.table()因为不方便设置行名
图1
图2
读取文件的时候,不是每次都能用这个函数、这些参数,而要具体情况具体分析
range(dat)
dat = as.matrix(2^dat - 1)#逆转log,发现需要逆转,才逆转,否则不要运行这句代码
count的数值范围,正常范围在成千上万不等,为什么此处结果是0到24之间呢,因为整个表达矩阵被log了,于是我们需要逆转log(在文件的下载页面也有介绍表达矩阵是否被取了log)
图3
dat[97,9]
as.character(dat[97,9])
# 转换为整数矩阵
exp = round(dat)
# 检查
as.character(exp[97,9])
log后,还有一个坑需要注意:眼见不一定为实,要用代码检查。看似整数但不是整数,所以要转换成整数
图4
2.2 临床信息
一般情况其实用不上临床信息,此处是按照惯例读取进来了。(不过有的临床信息包含了分组,这个可能有用)
clinical = read.delim("TCGA-CHOL.GDC_phenotype.tsv.gz")
clinical[1:4,1:4]
3.表达矩阵行名ID转换
library(tinyarray)
exp = trans_exp_new(exp)#小洁老师写的函数,任何以ensemble ID为行名的表达矩阵,都可以用这个函数直接转换;损失不到30%甚至50%的ID都没关系
exp[1:4,1:4]
4.基因过滤
需要过滤那些,在很多样本里表达量都为0或者表达量很低的基因。过滤标准不唯一
# 过滤之前基因数量: