R语言数据预处理——重复基因处理。
( gene_name )的情况,而在转换时经常会出现多个ensembl_id对应与一个gene symbol的情形,此时就出现了重复的gene symbol。重复的gene symbol当然是不能作为基因表达矩阵行名的,此时就需要我们去除重复的gene symbol。2.按重复基因表达值中位数去重——aggregate函数。4.按重复基因表达值最大值去重——aggregate函数。3.按重复基因
将基因表达矩阵行名的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)

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