在用featureCounts做完表达矩阵的counts值后进行TPM需要注意这个细节问题,在计算TPM时每个基因需要除以各自的基因长度来校正基因长度,每一个样本又要除以它各自的文库大小校正测序深度。
因此,我们的表达矩阵,其实是需要除以两个长度不一的向量,而且方向不一样,一个是按照行来除以(基因长度),一个是按照列来除以(测序深度),在我之前的文章https://www.jianshu.com/p/cd1c7b4ec6a2RNA-seq数据分析一:(HISAT2+featureCounts)中有提到
countdata <- read.csv("countdata.csv") #countdata.csv是提取了上一步的counts数据以及gene length rownames(countdata) <- countdata[,1] countdata <- countdata[,-1] kb <- countdata$length / 1000 count <- countdata[,1:8] rpk <- count / kb tpm <- t(t(rpk)/colSums(rpk) * 1000000) fpkm <- t(t(rpk)/colSums(count) * 10^6) #想计算数据框中每列的总和,使用colSums函数。 write.table(fpkm,file="eight_tissues_fpkm.xls",sep="\t",quote = F)
count 是表达矩阵,kb是不同基因长度向量,而 colSums(count) 是不同样本的长度向量。
矩阵除以向量,是按行的顺序来的,如果需要按列的顺序来(不同样本,一列一列),就得先转置,再转回来
关于矩阵除以向量,我以一个简单的例子向大家介绍
我们可以看到,一个矩阵除以向量是将向量按照行(第一行第一个,第二行第一个...)的顺序与矩阵中的数据相除。