将基因表达矩阵行名的ensembl_id ( gene_id ) 转换为gene symbol ( gene_name )的情况,而在转换时经常会出现多个ensembl_id对应与一个gene symbol的情形,此时就出现了重复的gene symbol。重复的gene symbol当然是不能作为基因表达矩阵行名的,此时就需要我们去除重复的gene symbol。

为便于验证,先随便造一个基因名有重复的表达谱数据。

set.seed(123)
expr=matrix(runif(300,5,10),ncol=10)
colnames(expr)=paste0("sample",1:10)
genes=sample(LETTERS,30,replace=T)
expr=data.frame(genes,expr)

1.直接按顺序删除第一次出现之后的所有重复基因——duplicated()函数

expr<-expr[,!duplicated(expr$genes)]

2.按重复基因表达值中位数去重——aggregate函数

expr_zhong=aggregate(.~genes,median,data=expr)

3.按重复基因表达值均值去重——aggregate函数

expr_mean=aggregate(.~genes,mean,data=expr)

4.按重复基因表达值最大值去重——aggregate函数

expr_max=aggregate(.~genes,max,data=expr)

部分来源:表达谱数据中重复基因--取平均/取最大值 - 知乎

问题:通过aggregate函数成功对基因去重,但是也改变了数据框中的数据类型,不便于后续操作,进一步改进如下

原始数据类型:numeric

aggregate函数处理后expr_zhong的:character

要将处理后的expr_zhong中的数据转换为numeric型代码如下:

# 1. 使用dplyr进行分组聚合(更灵活处理类型)
expr_zhong <- expr %>%
  group_by(symbol) %>%
  summarise(across(where(is.numeric), median, na.rm = TRUE), .groups = "drop") %>%
  as.data.frame()
# 2. 恢复原始列类型(与expr保持一致)
for(col in colnames(expr_zhong)) {
  if(col %in% colnames(expr)) {
    class(expr_zhong[[col]]) <- class(expr_zhong[[col]])
  }
}
# 3. 验证数据类型
class(expr$sample1)
class(expr_zhong$sample1)
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐