1

我正在使用 Walktrap 社区检测方法返回一个数量(在本例中为 19)的集群。我有一个属于这些集群中的一个或多个的成员列表。

  1. 我需要一种方法来搜索每个集群中是否存在成员并返回找到的匹配百分比。( eg cluster[0] = 0%, cluster[1] =Y%.....cluster[18]=Z%) 从而选择代表列表中成员的最佳集群。

  2. 一旦找到最佳集群,我需要一种方法来计算最佳集群的成员数量,并从原始(19-1)集群中选择另一个大小最接近的集群(成员数量)

     library(igraph)
     edges <- read.csv('http://dl.dropbox.com/u/23776534/Facebook%20%5BEdges%5D.csv')
     list<-read.csv("http://dl.dropbox.com/u/23776534/knownlist.csv")
     all<-graph.data.frame(edges)
     summary(all)
    all_wt<- walktrap.community(all, steps=6,modularity=TRUE,labels=TRUE)
    all_wt_memb <- community.to.membership(all,all_wt$merges,steps=which.max(all_wt$modularity)-1)
    all_wt_memb$csize
    
    >[1] 176  13 204  24   9 263  16   2   8   4  12   8   9  19  15   3   6   2   1
    
4

2 回答 2

1

%in%函数在使用时像:a %in% b将确定 vector 中的哪些元素a也存在于 vector 中b。所以对于每个集群,我会

  • 提取该集群的成员
  • 给定您感兴趣的成员列表,计算哪些是%in%这个集群——这将返回一个布尔向量
  • 您可以sum()在布尔向量上使用来计算真实元素的数量(即初始向量中存在于此集群中的元素数量
  • (可选)您可以通过集群的长度进行标准化,以获得由您感兴趣的列表组成的集群的百分比,或者通过您创建的列表的长度,以指示列表中的成员数量存在于这个集群中。

for()您可以使用或apply变体遍历每个集群。

然后 given all_wt_memb$csize,您将获得一个给定的值,即您的目标,并且您将希望找到最接近的数字。请参阅此链接,但您只是在计算最小绝对差:

x=c(1:100)
your.number=5.43
which(abs(x-your.number)==min(abs(x-your.number)))
于 2012-03-27T21:59:56.517 回答
0

这将为您提供第二大 all_wt_memb 的索引:

dat <- all_wt_memb$csize
order( dat- dat[which.max(dat)])[ length(dat)-1]
[1] 3
于 2012-03-27T21:58:41.637 回答