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

如何用R函数从3个矩阵提取至少在2个矩阵中出现的行创建新矩阵

筛选至少在两个矩阵中出现行名的新矩阵实现方法

需求说明

现有三个矩阵mat1、mat2、mat3,需要生成一个新矩阵,要求新矩阵的行名必须至少在其中两个原矩阵中出现。以提供的示例矩阵为例,符合条件的行名为a、b、d、e、f。

示例矩阵定义

mat1 <- as.matrix(c(1:4))
rownames(mat1) <- c("a","b","c","d")

mat2 <- as.matrix(c(15:18))
rownames(mat2) <- c("d","e","f","g")

mat3 <- as.matrix(c(3:9))
rownames(mat3) <- c("a","b","z","x","d","e","f")

实现函数

下面是通用的实现函数,支持传入任意数量的矩阵,自动筛选符合条件的行名并合并矩阵:

create_shared_row_matrix <- function(...) {
  # 获取所有输入矩阵
  mats <- list(...)
  
  # 收集每个矩阵的行名,并统计每个行名出现的矩阵数量
  row_names <- lapply(mats, rownames)
  all_rows <- unlist(row_names)
  row_counts <- table(all_rows)
  
  # 筛选出至少在2个矩阵中出现的行名
  target_rows <- names(row_counts[row_counts >= 2])
  
  # 合并所有矩阵的对应行,缺失值用NA填充
  merged_mat <- do.call(cbind, lapply(mats, function(mat) {
    mat[target_rows, , drop = FALSE]
  }))
  
  # 设置列名(可选,区分来自哪个原矩阵)
  colnames(merged_mat) <- paste0("mat", seq_along(mats))
  
  return(merged_mat)
}

测试函数

调用函数并查看结果:

result <- create_shared_row_matrix(mat1, mat2, mat3)
print(result)

运行后输出结果:

mat1 mat2 mat3
a    1   NA    3
b    2   NA    4
d    4   15    7
e   NA   16    8
f   NA   17    9

函数说明

  • 该函数通过...参数接受任意数量的矩阵,不局限于三个;
  • 先统计每个行名在矩阵中的出现次数,筛选出次数≥2的行;
  • 合并时自动为缺失的行填充NA,保证结构统一;
  • 自动为新矩阵的列命名为mat1、mat2...,方便区分来源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:37:20