你肉眼能看几万个基因名字判断有没有重复的基因?

在单细胞课程售后群看到提问,一个表格直接读进来是这样,如下图,

他想把第一列变成行号,就加了一个参数:row.names=1 结果报错了。
有趣的是他的提问:行是基因号,怎么会有重复的行呢?
我的回答,当然是标题啦:你肉眼能看几万个基因名字判断有没有重复的基因?

基因重复了的表达矩阵如何去冗余

这里其实应该是对于基因重复了的表达矩阵,最常见的情况介绍GEO数据挖掘的芯片表达矩阵处理,通常多个探针会对应同一个基因,我们应该是如何去冗余呢?标准是什么

这里我们不回答标准是什么,但是给出去冗余的代码,多个基因重复了的,我们只保留表达量最大的。

下面代码的dat就是一个很简单的表达矩阵,你可以任意GEO数据挖掘获得。

# 每次都要检测数据
dat[1:4,1:4]  
library(hgu133plus2.db)
ids=toTable(hgu133plus2SYMBOL) #toTable这个函数:通过看hgu133plus2.db这个包的说明书知道提取probe_id(探针名)和symbol(基因名)的对应关系的表达矩阵的函数为toTable
head(ids) #head为查看前六行
dat=dat[ids$probe_id,] #ids提取出probe_id这列,这列的每行都为一个探针,接着在dat这个矩阵中,按照刚刚取出的探针所在的行,再取出来组成一个新的矩阵dat,此操纵为取出与注视ids相对于的dat
#保证ids矩阵和dat矩阵长度相等
dat[1:4,1:4] 
ids$median=apply(dat,1,median) #ids新建median这一列,列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行
ids=ids[order(ids$symbol,ids$median,decreasing = T),]#对ids$symbol按照ids$median中位数从大到小排列的顺序排序,将对应的行赋值为一个新的ids
ids=ids[!duplicated(ids$symbol),]#将symbol这一列去除重复项,'!'为否,即取出不重复的项,去除重复的gene ,保留每个基因最大表达量结果s
dat=dat[ids$probe_id,] #新的ids取出probe_id这一列,将dat按照取出的这一列中的每一行组成一个新的dat
rownames(dat)=ids$symbol#把ids的symbol这一列中的每一行给dat作为dat的行名
##确保两个矩阵长度一致
dat[1:4,1:4]  #保留每个基因ID第一次出现的信息

看起来也不难理解吧,很简单的基础函数而已,都不需要加载杂七杂八的R包。

全国巡讲约你

第1-11站北上广深杭,西安,郑州, 吉林,武汉,成都,港珠澳(全部结束)

一年一度的生信技能树单细胞线下培训班(已结束)

全国巡讲第13站-杭州(生信技能树爆款入门课)(下一站甘肃兰州,火热报名)

(0)

相关推荐