【问题标题】:r igraph most connected nodesr igraph 大多数连接节点
【发布时间】:2016-01-14 21:04:03
【问题描述】:

我有一个图表:

paths = data.frame(from=c(10,20,30,10,30), to=c(20,30,50,30,60))
g <- graph_from_data_frame(paths, directed=FALSE)
plot(g)

有没有命令找出每个节点的连接数,找到连接最多的节点。在此示例中,30 是连接最多的节点,有 4 个连接。然后是 20 和 10,各有 2 个连接。

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    在这种情况下,您可以通过计算连接数从 data.frame 计算它(将 from & to 视为相同,因为任一向量中的节点出现意味着 1 个连接):

    sort(table(c(paths$from, paths$to)), decreasing = TRUE)
    

    结果:

    30 10 20 50 60 
     4  2  2  1  1 
    

    解释:代码是创建一个所有连接的向量(c(paths$from, paths$to)),然后计算频率(table),然后sorting 结果得到一个有序列表,从连接最多到最少连接(@987654326 @)。

    【讨论】:

      【解决方案2】:

      这里要查找连接数,只需统计data.frame中每个数字出现的次数,例如10出现两次,连接数为2。 可以使用rle,它返回一个具有两个属性的对象:

      result <- rle(sort(c(paths[,1], paths[,2])))
      
      > result
      Run Length Encoding
      lengths: int [1:5] 2 2 4 1 1
      values : num [1:5] 10 20 30 50 60
      

      您可以通过result$values 获取其计数,也可以将结果转换为data.frame

      > data.frame(dot=result$lengths, count=result$values)
        dot count
      1   2    10
      2   2    20
      3   4    30
      4   1    50
      5   1    60
      

      【讨论】:

        【解决方案3】:

        试试这个

        lengths(as_adj_list(g))
        # 10 20 30 50 60 
        #  2  2  4  1  1 
        

        或者使用Matrix中的colSums函数试试这个:

        library(Matrix)
        colSums(g[])
        # 10 20 30 50 60 
        #  2  2  4  1  1
        
        which.max(colSums(g[]))
        # 30 
        #  3 
        
        max(colSums(g[]))
        # [1] 4
        

        【讨论】:

          猜你喜欢
          • 2020-07-31
          • 2017-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-14
          • 1970-01-01
          • 2018-09-23
          • 1970-01-01
          相关资源
          最近更新 更多