分享

表达谱数据中相同基因如何处理

 生信交流平台 2021-12-29

    在分析表达谱芯片的时候,我们经常会遇到多个探针对应同一个基因的情况。一般遇到这种情况,最常见的两种处理方法是

1)取平均

2)取表达值高的那个探针

    那么今天我们就用R来实现这两种处理方式。至于,如何将探针转换成相应的基因名字,相对来说还是比较容易的。一般的芯片数据都会有一个相应的注释文件,从中可以找到探针对应的基因名字。对于一些Agilent的商用芯片和一些比较特殊的芯片平台,可能找不到探针的注释文件。前面我们也简单介绍过

☞探针注释文件中没有基因名字怎么办?

探针注释文件中没有基因名字怎么办?(二)

首先我们先来随便造一个基因名有重复的表达谱数据。

#设置随机过程的seed,保证结果可重复set.seed(123)#随机生成一个30行10列的矩阵expr=matrix(runif(300,5,10),ncol=10)#列名字为sample1-10colnames(expr)=paste0("sample",1:10)#行名从26个大写字母里面有放回的抽取30个字母,作为基因名genes=sample(LETTERS,30,replace=T)#合并得到基因名有重复的表达谱矩阵expr=data.frame(genes,expr)expr

接下来我们先用第一种方法

1)取平均

#利用aggregate函数,对相同的基因名按列取平均expr_mean=aggregate(.~genes,mean,data=expr)expr_mean

会得到如下结果,感兴趣的小伙伴可以随便挑几个check一下

2)对于重复的基因名字,取表达值最大的哪一行

其实aggregate也可以对相同的基因使用max函数取最大值,但是这样处理是有问题的。例如同一个基因出现了三次,那么会有三行数据。如果使用aggregate+max,对于每一个样本,他会从三个值中挑选最大的那个值最为这个样本的表达值,这样做是不科学的。我们先来看看效果

#利用aggregate函数,对相同的基因名按列取取最大值expr_max=aggregate(.~genes,max,data=expr)expr_max

原始数据

处理之后的数据

所以这个做法不可取。

对于相同的基因,我们应该挑选行平均值大的那一整行,而不应该打乱

#计算行平均值,按降序排列index=order(rowMeans(expr[,-1]),decreasing = T)#调整表达谱的基因顺序expr_ordered=expr[index,]#对于有重复的基因,保留第一次出现的那个,即行平均值大的那个keep=!duplicated(expr_ordered$genes)#得到最后处理之后的表达谱矩阵expr_max=expr_ordered[keep,]expr_max

最后结果是这样的

为了方便大家交流学习,共同进步,我特地创建了微信交流群

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多