head(mycounts)
rownames(mycounts)<-mycounts[,1]
mycounts<-mycounts[,-1]
head(mycounts)
kb <- mycounts$Length / 1000
kb
countdata <- mycounts[,1:9]
rpk <- countdata / kb
rpk
tpm <- t(t(rpk)/colSums(rpk) * 1000000)
head(tpm)
write.table(tpm,file="2020武汉加油_tpm.xls",sep="\t",quote=F)
fpkm <- t(t(rpk)/colSums(countdata) * 10^6) (之前这里写成了10^9,多谢@不爱说话的生物狗 提醒,现在已经修改)
head(fpkm)
write.table(fpkm,file="2020武汉加油_fpkm.xls",sep="\t",quote=F)
fpkm_to_tpm = t(t(fpkm)/colSums(fpkm))*10^6
head(fpkm_to_tpm)
当然,已知所有基因的FPKM情况下,可以通过上述公式直接在excel里计算相应基因的TPM值。
获取表达矩阵,处理TCGA的count数据,1表示为行。
导入数据
加 ENTREZID列,用于富集分析(symbol转entrezid,然后inner_join)
转化空格为NA
用花花的专属TCGA包,ID进行转换
把空着的值改为NA
以病人为中心,表达矩阵按病人ID去重复
去除重复
TPM数据做单个基因的生存分析file:///C:/Users/denghuan/Desktop/The%20learning%20of%20R%20software/Practice/%E7%94%9F%E5%AD%98%E5%88%86%E6%9E%90%20survival%20analysis/6.Survival.html
stringr::str_replace_all()
str_detect(colnames(exp),"TCGA-W5-AA2R")
在用 featureCounts 做完表达矩阵的counts值后进行TPM需要注意这个细节问题,在计算TPM时每个基因需要除以各自的基因长度来校正基因长度,每一个样本又要除以它各自的文库大小校正测序深度。
因此,我们的表达矩阵,其实是需要除以两个长度不一的向量,而且方向不一样,一个是按照行来除以(基因长度),一个是按照列来除以(测序深度),在我之前的文章 https://www.jianshu.com/p/cd1c7b4ec6a2 RNA-seq数据分析一:(HISAT2+featureCounts) 中有提到
count 是表达矩阵,kb是不同基因长度向量,而 colSums(count) 是不同样本的长度向量。
矩阵除以向量,是按行的顺序来的,如果需要按列的顺序来(不同样本,一列一列),就得先转置,再转回来
我们可以看到,一个矩阵除以向量是将向量按照行(第一行第一个,第二行第一个...)的顺序与矩阵中的数据相除。