【问题标题】:To find number of patterns查找模式数量
【发布时间】:2014-06-19 00:09:16
【问题描述】:

对于像这样的数据集:

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 个。所以他们形成了1个模式。 21 也出现在 4-21 中。该边缘也有助于相同的模式。现在 4-881、4-212、3-4 在他们的边缘有 4 个。所以也有助于相同的模式。因此边 21-79、21-186、4-21、4-881、4-212、3-4 形成 1 个图案。同样,还有其他模式。因此,我们需要将具有任何 1 个共同节点的所有边分组以形成模式(或子图)。对于给定的数据集,共有 4 种模式。

我需要编写代码(最好在 R 中)找到这样的不。的模式。

【问题讨论】:

    标签: r graph-theory subgraph edge-list


    【解决方案1】:

    既然您将数据描述为子图,为什么不使用对图非常了解的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
    

    如你所料,这是 4。

    【讨论】:

    • 这无疑是一个很难搜索的问题,但这与我在这里的旧问题是否相同:stackoverflow.com/questions/12135971/… ?
    • 非常感谢!是的,我的问题类似于 ^this 链接上发布的问题。但是当我尝试包含 igraph 库时出现错误:“没有名为 'igraph' 的包”。你能帮帮我吗?
    • @phoenix 如果您没有该库,则需要先安装它。只需在 R 中运行 install.packages("igraph")
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多