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

如何在R语言中提取矩阵中的TRUE组合并去除重复?

R语言提取对称矩阵中TRUE的非重复组合

先给出目标矩阵MAT:

99    70    33    36    93
99  TRUE FALSE FALSE FALSE  TRUE
70 FALSE  TRUE FALSE FALSE FALSE
33 FALSE FALSE  TRUE  TRUE  TRUE
36 FALSE FALSE  TRUE  TRUE FALSE
93  TRUE FALSE  TRUE FALSE  TRUE

矩阵的dput结构:

structure(c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, 
FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, 
TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE), dim = c(5L, 5L), dimnames = list(
    c("99", "70", "33", "36", "93"), c("99", "70", "33", "36", 
    "93")))

需求说明

由于矩阵是对称结构,需要提取所有值为TRUE的行名与列名组合,同时去除重复的对称组合(例如(99,93)和(93,99)视为重复,仅保留一个),最终得到如下格式的结果:

[,1] [,2]
[1,]   99   99
[2,]   99   93
[3,]   70   70
[4,]   33   33
[5,]   33   36
[6,]   33   93
[7,]   36   36
[8,]   93   93

已尝试的代码及结果

使用以下代码得到了列表形式的结果:

apply(MAT,1,function(data)names(which(data==T)))

输出结果:

$99
[1] "99" "93"

$70
[1] "70"

$33
[1] "33" "36" "93"

$36
[1] "33" "36"

$93
[1] "99" "33" "93"

解决方案

可以通过两种方式实现目标:

方法一:直接从矩阵提取并去重

  1. 获取所有TRUE位置的坐标,转换为行名和列名组合:
# 获取所有TRUE的坐标
true_pos <- which(MAT, arr.ind = TRUE)
# 转换为行名与列名的配对
true_pairs <- cbind(rownames(MAT)[true_pos[,1]], colnames(MAT)[true_pos[,2]])
  1. 利用对称矩阵特性筛选非重复组合(只保留行名≤列名的条目),再排序对齐示例格式:
# 筛选非重复组合
unique_pairs <- true_pairs[true_pairs[,1] <= true_pairs[,2], ]
# 按行名、列名排序
unique_pairs <- unique_pairs[order(unique_pairs[,1], unique_pairs[,2]), ]

执行后unique_pairs即为目标矩阵:

> unique_pairs
     [,1] [,2]
[1,] "99" "99"
[2,] "99" "93"
[3,] "70" "70"
[4,] "33" "33"
[5,] "33" "36"
[6,] "33" "93"
[7,] "36" "36"
[8,] "93" "93"

方法二:基于已得到的列表转换

如果你想基于已生成的列表处理:

# 假设你的列表名为res_list
res_list <- apply(MAT,1,function(data)names(which(data==T)))
# 展开列表为数据框
pairs_df <- stack(res_list)
# 重命名列
colnames(pairs_df) <- c("col", "row")
# 筛选非重复组合并排序
unique_pairs_df <- pairs_df[pairs_df$row <= pairs_df$col, ]
unique_pairs_df <- unique_pairs_df[order(unique_pairs_df$row, unique_pairs_df$col), ]
# 转换为矩阵
unique_pairs_mat <- as.matrix(unique_pairs_df[, c("row", "col")])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:01:35