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

如何用R语言找出矩阵中与另一矩阵行完全匹配的行号?

在R中找出矩阵mat1与mat2行完全匹配的行号

现有两个矩阵mat1和mat2,已知mat2的所有行都存在于mat1中,需求是找出mat1中所有与mat2行完全匹配的行的行号。以下是示例数据:

mat1 <- matrix(c(0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0), 8, 3)
mat2 <- matrix(c(0,0,1,1,0,1,0,1,1,0,1,1), 4, 3)

# 查看mat1
mat1
#      [,1] [,2] [,3]
# [1,]    0    0    0
# [2,]    0    0    1
# [3,]    0    1    0
# [4,]    1    0    1
# [5,]    0    1    0
# [6,]    1    0    0
# [7,]    1    1    1
# [8,]    1    1    0

# 查看mat2
mat2
#      [,1] [,2] [,3]
# [1,]    0    0    1
# [2,]    0    1    0
# [3,]    1    0    1
# [4,]    1    1    1

方法一:Base R字符串拼接法

将矩阵的每行元素拼接成唯一字符串,通过集合匹配快速定位行号,适合中小规模矩阵:

# 将每行转为以逗号分隔的字符串
mat1_rows <- apply(mat1, 1, paste, collapse = ",")
mat2_rows <- apply(mat2, 1, paste, collapse = ",")

# 找出所有匹配的行号
match_rows <- which(mat1_rows %in% mat2_rows)
match_rows
# 输出:[1] 2 3 5 4 7

方法二:dplyr半连接法

借助tidyverse工具集,将矩阵转为数据框后用半连接筛选匹配行,语法更直观:

library(dplyr)

# 转换为数据框并保留行号
mat1_df <- as.data.frame(mat1) %>% mutate(row_num = row_number())
mat2_df <- as.data.frame(mat2)

# 半连接提取匹配行的行号
match_rows <- mat1_df %>% 
  semi_join(mat2_df, by = colnames(mat2_df)) %>% 
  pull(row_num)
match_rows
# 输出:[1] 2 3 5 4 7

方法三:Base R合并法

利用merge函数匹配所有列相同的行,适合习惯原生R函数的用户:

# 为矩阵添加行号列
mat1_with_row <- cbind(mat1, row_num = 1:nrow(mat1))
mat2_with_row <- cbind(mat2, dummy = 1:nrow(mat2))  # 添加临时列避免合并冲突

# 合并矩阵并提取行号,最后排序
merged <- merge(mat1_with_row, mat2_with_row, by = colnames(mat1))
match_rows <- sort(merged$row_num)
match_rows
# 输出:[1] 2 3 4 5 7

注:示例中mat1的第3、5行均与mat2的第二行完全匹配,因此结果包含这两个行号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:52:56