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

如何在R中编写函数按行名匹配矩阵行并生成新矩阵

矩阵行名匹配并生成新矩阵的R函数实现

核心思路

提取矩阵A的所有行名,在矩阵B中匹配这些行名,将匹配到的B对应行与A合并,生成保留行名的两列新矩阵C。

代码实现

先模拟带行名的测试数据(方便验证效果):

# 生成测试矩阵,固定随机种子保证结果可复现
set.seed(123)
A <- matrix(rnorm(100), nrow = 100, ncol = 1, dimnames = list(paste0("row", 1:100), "A_value"))
B <- matrix(rnorm(4000), nrow = 4000, ncol = 1, dimnames = list(paste0("row", sample(1:5000, 4000)), "B_value"))

然后编写匹配函数:

match_matrix_rows <- function(mat_A, mat_B) {
  # 提取矩阵A的行名
  a_rows <- rownames(mat_A)
  
  # 定位A行名在B行名中的位置(不存在的行名对应NA)
  b_match_pos <- match(a_rows, rownames(mat_B))
  
  # 提取B中匹配到的行,drop=FALSE确保结果保持矩阵格式
  matched_b <- mat_B[b_match_pos, , drop = FALSE]
  
  # 合并A与匹配后的B,设置列名
  result_mat <- cbind(mat_A, matched_b)
  colnames(result_mat) <- c("A_value", "B_value")
  
  return(result_mat)
}

使用示例

# 调用函数生成矩阵C
C <- match_matrix_rows(A, B)

# 查看前5行结果
head(C)

可选优化

如果需要过滤掉B中不存在的行(即移除含NA的行),可以给函数添加过滤逻辑:

match_matrix_rows <- function(mat_A, mat_B, remove_na = FALSE) {
  a_rows <- rownames(mat_A)
  b_match_pos <- match(a_rows, rownames(mat_B))
  matched_b <- mat_B[b_match_pos, , drop = FALSE]
  result_mat <- cbind(mat_A, matched_b)
  colnames(result_mat) <- c("A_value", "B_value")
  
  if (remove_na) {
    result_mat <- result_mat[!is.na(result_mat[, "B_value"]), , drop = FALSE]
  }
  
  return(result_mat)
}

# 调用时开启过滤
C_clean <- match_matrix_rows(A, B, remove_na = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:15:54