根据成对相等对列进行分组
Grouping columns based on pairwise equality
我有一个名为 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
我最终会使用此命令的输出来创建映射。这些值本质上是属于同一组的元素的索引。
像这样:
library(dplyr)
equalityMatrix %>%
t %>%
as.data.frame %>%
setNames(c("group", "value")) %>%
group_by(group) %>%
summarize(value = list(value))
可以将其视为一个图形,其中每个数字都是图形中的一个节点,并且列中同时出现的两个数字意味着与这两个数字关联的顶点在图形中共享一条边。对于您的示例,我们可以使用 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
我有一个名为 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
我最终会使用此命令的输出来创建映射。这些值本质上是属于同一组的元素的索引。
像这样:
library(dplyr)
equalityMatrix %>%
t %>%
as.data.frame %>%
setNames(c("group", "value")) %>%
group_by(group) %>%
summarize(value = list(value))
可以将其视为一个图形,其中每个数字都是图形中的一个节点,并且列中同时出现的两个数字意味着与这两个数字关联的顶点在图形中共享一条边。对于您的示例,我们可以使用 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