我有一个叫做equalityMatrix的矩阵
> equalityMatrix
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18]
[1,] 29 29 29 29 55 55 55 55 101 101 101 111 111 115 134 134 134 151
[2,] 101 111 115 316 134 151 235 319 111 115 316 115 316 316 151 235 319 235
[,19] [,20]
[1,] 151 235
[2,] 319 319
(做你的:)
structure(c(29L, 101L, 29L, 111L, 29L, 115L, 29L, 316L, 55L,
134L, 55L, 151L, 55L, 235L, 55L, 319L, 101L, 111L, 101L, 115L,
101L, 316L, 111L, 115L, 111L, 316L, 115L, 316L, 134L, 151L, 134L,
235L, 134L, 319L, 151L, 235L, 151L, 319L, 235L, 319L), .Dim = c(2L,
20L))
这表示元素 29 等于元素 101、111、115 和 316;元素 55 等于元素 134、151、235 和 319;等等等等。
如何有效地获得如下所示的相等元素列表?
[[1]]
[1] 29 101 111 115 316
[[2]]
[1] 55 134 151 235 319
我最终将使用此命令的输出来创建映射。这些值本质上是属于同一组的元素的索引。
最佳答案
一种方法是将其视为图形,其中每个数字都是图形中的一个节点,并且一列中同时出现的两个数字意味着与这两个数字关联的顶点共享图形中的一条边。对于您的示例,我们可以使用 igraph 包用您的数据创建图表:
library(igraph)
g <- graph.data.frame(t(equalityMatrix))
plot(g)
图的组成部分将是相等的数字:
split(as.numeric(V(g)$name), components(g)$membership)
# $`1`
# [1] 29 101 111 115 316
#
# $`2`
# [1] 55 134 151 235 319
关于r - 基于成对相等的分组列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33864072/