首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找模式数

查找模式数
EN

Stack Overflow用户
提问于 2014-06-19 00:09:16
回答 1查看 95关注 0票数 0

对于如下所示的数据集:

代码语言:javascript
复制
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),将找到这样的不。关于模式的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-19 00:54:19

既然您将数据描述为子图,那么为什么不使用对图非常了解的igraph包呢?下面是data.frame格式的数据

代码语言:javascript
复制
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))

我们可以将每个值看作一个顶点名,这样您提供的数据就像一个边缘列表。因此,我们创建我们的图

代码语言:javascript
复制
library(igraph)
gg <- graph.edgelist(cbind(as.character(dd$V1), as.character(dd$V2)), 
    directed=F)

定义节点和顶点,从而生成以下图(plot(gg))

现在,您想知道数据中真正表示为连通子图的“模式”的数量。您可以使用clusters()命令提取该信息。具体来说,

代码语言:javascript
复制
clusters(gg)$no
# [1] 10

它显示了您提供的数据中有10个集群。但你只想要有两个以上顶点的。我们可以用它

代码语言:javascript
复制
sum(clusters(gg)$csize>2)
# [1] 4

和你预期的一样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24296887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档