对于如下所示的数据集:
21 79
78 245
21 186
65 522
4 21
3 4
4 212
4 881
124 303
28 653
28 1231
7 464
7 52
17 102
16 292
65 837
28 203
28 1689
136 2216
7 1342
56 412 我需要找到相关模式的数量。例如,21-79和21-186有21个共同之处。因此,它们形成了一个模式。在4-21中也有21种存在。这一边缘也促成了同样的模式。现在4-881,4-212,3-4的边缘有4。所以同样的模式也有贡献。因此,边缘21-79,21-186,4-21,4-881,4-212,3-4形式1模式。同样,还有其他模式。因此,我们需要对所有具有公共1节点的边进行分组,以形成模式(或子图)。对于给定的数据集,共有4种模式。
我需要写的代码(最好是在R),将找到这样的不。关于模式的。
发布于 2014-06-19 00:54:19
既然您将数据描述为子图,那么为什么不使用对图非常了解的igraph包呢?下面是data.frame格式的数据
dd <- structure(list(V1 = c(21L, 78L, 21L, 65L, 4L, 3L, 4L, 4L, 124L,
28L, 28L, 7L, 7L, 17L, 16L, 65L, 28L, 28L, 136L, 7L, 56L), V2 = c(79L,
245L, 186L, 522L, 21L, 4L, 212L, 881L, 303L, 653L, 1231L, 464L,
52L, 102L, 292L, 837L, 203L, 1689L, 2216L, 1342L, 412L)), .Names = c("V1",
"V2"), class = "data.frame", row.names = c(NA, -21L))我们可以将每个值看作一个顶点名,这样您提供的数据就像一个边缘列表。因此,我们创建我们的图
library(igraph)
gg <- graph.edgelist(cbind(as.character(dd$V1), as.character(dd$V2)),
directed=F)定义节点和顶点,从而生成以下图(plot(gg))

现在,您想知道数据中真正表示为连通子图的“模式”的数量。您可以使用clusters()命令提取该信息。具体来说,
clusters(gg)$no
# [1] 10它显示了您提供的数据中有10个集群。但你只想要有两个以上顶点的。我们可以用它
sum(clusters(gg)$csize>2)
# [1] 4和你预期的一样。
https://stackoverflow.com/questions/24296887
复制相似问题