You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对含重复行名的normal.meth矩阵取中位数去重?

处理矩阵重复行名:按行名取中位数合并

需求说明

  • 针对矩阵normal.meth:若存在重复行名,对同一行名的所有行按列取中位数后保留唯一一行;行名唯一的行直接保留
  • 最终输出矩阵不得有重复行名

正确实现代码

首先加载matrixStats包,推荐两种高效实现方式:

方式一:简洁版(利用rowsum分组计算)

library(matrixStats)
# 转置后按行名分组计算中位数,再转置回原结构
normal.meth <- t(rowsum(t(normal.meth), rownames(normal.meth), FUN = median))

方式二:直观版(遍历唯一行名)

library(matrixStats)
# 获取所有唯一行名
unique_rownames <- unique(rownames(normal.meth))
# 初始化结果矩阵,指定行名和列名
result_matrix <- matrix(nrow = length(unique_rownames), ncol = ncol(normal.meth),
                        dimnames = list(unique_rownames, colnames(normal.meth)))
# 遍历每个唯一行名,计算对应行的列中位数
for (rn in unique_rownames) {
  result_matrix[rn, ] <- colMedians(normal.meth[rownames(normal.meth) == rn, , drop = FALSE])
}
# 替换原矩阵
normal.meth <- result_matrix

注意:原提供的代码sapply(split.default(normal.meth, colnames(normal.meth)), rowMedians)逻辑错误,split.default是按列拆分(列名均为唯一样本ID),无法实现按行名分组合并的需求,请勿使用。

输入示例

> dput(normal.meth[1:5,1:5])
structure(c(0.032865303709292, 0.52090224831803, 0.938794144634782, 
0.0245464559203754, 0.0219459912613677, 0.0379074157666324, 0.517612501352023, 
0.876290186551959, 0.0327330251402918, 0.0128121186436643, 0.0226085394857827, 
0.44294311681768, 0.747965490184437, 0.0181395446476151, 0.0125454991770939, 
0.0254179654232608, 0.55890575859087, 0.947559241210409, 0.0193177558971086, 
0.0105052884119836, 0.0276096307433916, 0.477774759564032, 0.817474068951357, 
0.0278807865780101, 0.0138086173417844), dim = c(5L, 5L), dimnames = list(
    c("5S_rRNA", "5S_rRNA", "5S_rRNA", "ABC", "DEF"), 
    c("TCGA.A4.7288.11", "TCGA.BQ.5880.11", "TCGA.BQ.5879.11", 
    "TCGA.BQ.5883.11", "TCGA.BQ.7055.11")))

期望输出

> dput(normal.meth[1:5,1:5])
structure(c(0.0328653,  
0.0245464559203754, 0.0219459912613677, 0.03790742, 
0.0327330251402918, 0.0128121186436643, 0.02260854, 
0.0181395446476151, 0.0125454991770939, 
0.02541797, 0.0193177558971086, 
0.0105052884119836, 0.02760963, 
0.0278807865780101, 0.0138086173417844), dim = c(3L, 5L), dimnames = list(
    c("5S_rRNA", "ABC", "DEF"), 
    c("TCGA.A4.7288.11", "TCGA.BQ.5880.11", "TCGA.BQ.5879.11", 
    "TCGA.BQ.5883.11", "TCGA.BQ.7055.11")))

内容的提问来源于stack exchange,提问作者Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:35:54