Y:(作为矩阵)(2 x 7,按行)
6 8, 2 5, 2 10, 4 10, 7 8, 4 9, 1 3
y = c(6, 8, 2, 5, 2 ,10, 4, 10, 7, 8, 4, 9, 1, 3)
Y = t(matrix(y, nrow=2))
输出(按顺序分组的元素列表):
6 8 7, 5 2 10 4 9, 1 3
我正在尝试使用下面链接的函数来实现上述输出,该函数采用两个向量 a,b 并组合在一个公共元素上。
我尝试过循环,但我在管理列表时迷失了方向,并且想知道是否有更智能的方法来实现此输出。也许使用lapply?
任何想法或前进的方向将不胜感激。
我尝试过 for(i in 1:length(Y[,1])){ ...变化但无济于事。
这是一个图论问题 - 您可以将每个值视为图的节点,如果它们出现在同一行,则有一条边连接这些节点。您的目标是列出连接的组件(或集群)。
然后我们可以使用
igraph
包来完成工作:
components = Y |> graph_from_edgelist() |> components()
nodes = Y |> c() |> unique() |> sort()
split(nodes, components$membership)
# $`1`
# [1] 1 3
#
# $`2`
# [1] 2 4 5 9 10
#
# $`3`
# [1] 6 7 8