【问题标题】:R: igraph, matching members of a "known" cluster to members of observed clusters returning a %matchR:igraph,将“已知”集群的成员与观察到的集群的成员匹配,返回 %match
【发布时间】:2012-03-27 21:46:24
【问题描述】:

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

  1. 我需要一种方法来搜索每个集群中是否存在 成员并返回找到的匹配的百分比。 (例如集群[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
    

【问题讨论】:

    标签: r cluster-analysis igraph


    【解决方案1】:

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

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

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

    然后给定all_wt_memb$csize,您将有一个给定的值作为您的目标,并且您会想要找到最接近的数字。请参阅this link,但您只是在计算最小绝对差:

    x=c(1:100)
    your.number=5.43
    which(abs(x-your.number)==min(abs(x-your.number)))
    

    【讨论】:

      【解决方案2】:

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

      dat <- all_wt_memb$csize
      order( dat- dat[which.max(dat)])[ length(dat)-1]
      [1] 3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-20
        • 2015-09-08
        • 2015-04-12
        • 2023-03-18
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多