从TCGA表达矩阵里拆出配对样本
2020-08-18 本文已影响0人
小洁忘了怎么分身
0.需求
TCGA里的数据tumor多normal少,想要挑选出配对样本进行差异分析。(并不是说必须挑配对样本才能做哦,直接做也是可以的)
1.数据
这里使用的数据是TCGA的CHOL表达矩阵。
rm(list = ls())
load("exp.Rdata")
dim(exp)
## [1] 30348 45
exp[1:4,1:4]
## TCGA-W5-AA36-01A-11R-A41I-07
## ENSG00000000003.13 2504
## ENSG00000000419.11 1272
## ENSG00000000457.12 504
## ENSG00000000460.15 123
## TCGA-W5-AA2H-01A-31R-A41I-07
## ENSG00000000003.13 226
## ENSG00000000419.11 1146
## ENSG00000000457.12 602
## ENSG00000000460.15 162
## TCGA-ZU-A8S4-11A-11R-A41I-07
## ENSG00000000003.13 4107
## ENSG00000000419.11 741
## ENSG00000000457.12 312
## ENSG00000000460.15 170
## TCGA-WD-A7RX-01A-12R-A41I-07
## ENSG00000000003.13 9646
## ENSG00000000419.11 1266
## ENSG00000000457.12 1317
## ENSG00000000460.15 451
head(colnames(exp))
## [1] "TCGA-W5-AA36-01A-11R-A41I-07"
## [2] "TCGA-W5-AA2H-01A-31R-A41I-07"
## [3] "TCGA-ZU-A8S4-11A-11R-A41I-07"
## [4] "TCGA-WD-A7RX-01A-12R-A41I-07"
## [5] "TCGA-3X-AAVC-01A-21R-A41I-07"
## [6] "TCGA-3X-AAVE-01A-11R-A41I-07"
从TCGA ID里可以找到tumor和normal的分组,统计它们的数量:
table(stringr::str_sub(colnames(exp),14,15)<10)
##
## FALSE TRUE
## 9 36
2.代码实现
配对样本的共同点是病人ID(前12位)一致,根据这个来匹配即可。
先拆分成tumor和normal两个矩阵,根据ID的14和15位来拆
library(stringr)
exp_nor = exp[,str_sub(colnames(exp),14,15) > 10]
exp_tum = exp[,str_sub(colnames(exp),14,15)<=10]
有normal样本的病人的ID,是normal组样本ID的前12位,也是exp_nor的行名。
patient = str_sub(colnames(exp_nor),1,12)
然后将tumor矩阵中与patient相匹配的样本名选出来,能匹配到的就会被挑出来。%in%从来都是R语言里的一个神技能:%in%很简单
k = str_sub(colnames(exp_tum),1,12) %in% patient;table(k)
## k
## FALSE TRUE
## 27 9
exp_tum = exp_tum[,k]
可以把表达矩阵拼回去咯:
exp2 = cbind(exp_tum,exp_nor)
dim(exp2)
## [1] 30348 18
就相当于把表达矩阵按列取子集了,tumor和normal各九个样本,后面可以拿来做配对样本的差异分析哦,例如下面这张图,就是COAD数据配对差异分析得到的差异基因热图。
转录组的差异分析在这里:TCGA(转录组)差异分析三大R包及其结果对比