🤣 Same Symbol | 哇咔咔!!!盘点一下表达矩阵中重复基因的处理方法!~

1写在前面医院天天叫我们填问卷,我真是不能理解。🫠

动不动就问我们对医院的福利满意吗,对自己的收入满意吗,觉不觉得工作负荷太重了???🙂

我们满不满意,觉不觉得累,医院心里没点数吗!?~~~🤒

不能再说了,再说我的号就要被河蟹掉了。🥸

今天的教程是相对比较基础的了,分享一下我处理Expression matrix时经常遇到的一个小问题,就是重复基因名或者探针名的问题。🤪

这个问题的处理起来也简单也复杂,你可以随机取一个,可以都去掉,可以取最大值,可以取均值,仁者见仁,智者见智吧。🧐

接着是今天的正文,盘点一下我个人常用的几种处理重复基因的方法!~🥳

2用到的包代码语言:javascript复制rm(list = ls())

library(tidyverse)

library(limma)

library(IOBR)

3示例数据今天是随机生成的数据,20个样本,30个基因。🙃

代码语言:javascript复制set.seed(123456)

exprSet <- matrix(runif(600, 1, 10), ncol= 20)

colnames(exprSet) <- paste0("Sample",1:20)

genes <- paste0("Gene", sample(LETTERS, 30, replace=T))

exprSet <- data.frame(genes,exprSet)

DT::datatable(exprSet)

看一下有几个重复的基因吧,10个。😘

代码语言:javascript复制table(duplicated(exprSet$genes))

4方法一(取高值)这里需要注意一下哦,对于相同的基因,应该挑选行平均值大的一整行,而不应该打乱。🥳

代码语言:javascript复制index <- order(rowMeans(exprSet[,-1]),decreasing = T)

exprSet_ordered <- exprSet[index,]

keep <- !duplicated(exprSet_ordered$genes)

exprSet_max <- exprSet_ordered[keep,]

DT::datatable(exprSet_max)

再看一下重复的基因去掉了没有,好的,任务完成。😙

代码语言:javascript复制table(duplicated(exprSet_max$genes))

5方法二(取均值)5.1 aggregate函数法代码语言:javascript复制exprSet_mean <- aggregate(.~genes, mean, data = exprSet)

DT::datatable(exprSet_mean)

代码语言:javascript复制table(duplicated(exprSet_mean$genes))

5.2 avereps函数法代码语言:javascript复制exprSet_avereps <- avereps(exprSet,ID = exprSet$genes) %>%

as.data.frame()

DT::datatable(exprSet_avereps)

代码语言:javascript复制table(duplicated(exprSet_avereps$genes))

6方法三(IOBR包)最后介绍一下IOBR包的remove_duplicate_genes()函数,非常好用!~🤓

虽然这里method写的是mean,但实际上是挑选了平均值最大的一行,我个人也是比较喜欢这种方法。🤨

代码语言:javascript复制exprSet_IOBR_mean <- remove_duplicate_genes(exprSet, column_of_symbol = "genes", method = "mean")

DT::datatable(exprSet_IOBR_mean)

代码语言:javascript复制table(duplicated(rownames(exprSet_IOBR_mean)))