【问题标题】:Igraph Identifying nodes based on centrality scoresIgraph 基于中心性分数识别节点
【发布时间】:2019-01-07 08:55:46
【问题描述】:

我正在运行 igraph 包,以便对此示例数据集进行一些网络分析

structure(list(ï..Column1 = c(NA, NA, NA, NA), Column2 = c(NA, 
NA, NA, NA), Column3 = c(NA, NA, NA, NA), Column4 = c(NA, NA, 
NA, NA), Column5 = structure(c(2L, 1L, 4L, 3L), .Label = c("Eric ", 
"Jim", "Matt", "Tim"), class = "factor"), Column6 = c(NA, NA, 
NA, NA), Column7 = structure(c(1L, 3L, 2L, 3L), .Label = c("Eric", 
"Erica", "Mary "), class = "factor"), Column8 = structure(c(3L, 
2L, 1L, 3L), .Label = c("Beth", "Loranda", "Matt"), class = "factor"), 
    Column9 = structure(c(2L, 3L, 1L, 3L), .Label = c("Courtney ", 
    "Heather ", "Patrick"), class = "factor"), Column10 = structure(4:1, .Label = c("Beth", 
    "Heather", "John", "Loranda "), class = "factor"), Column11 = c(NA, 
    NA, NA, NA), Column12 = c(NA, NA, NA, NA), Column13 = c(NA, 
    NA, NA, NA), Column14 = c(NA, NA, NA, NA), Column15 = c(NA, 
    NA, NA, NA)), class = "data.frame", row.names = c(NA, -4L
))

这里是任何想要跳过查找步骤的人的边缘列表

structure(c("Jim", "Eric ", "Tim", "Matt", "Jim", "Eric ", "Tim", 
"Matt", "Jim", "Eric ", "Tim", "Matt", "Jim", "Eric ", "Tim", 
"Matt", "Eric", "Mary ", "Erica", "Mary ", "Matt", "Loranda", 
"Beth", "Matt", "Heather ", "Patrick", "Courtney ", "Patrick", 
"Loranda ", "John", "Heather", "Beth"), .Dim = c(16L, 2L), .Dimnames = list(
    NULL, c("Column5", "value")))

我正在尝试使用此代码计算网络中每个节点的中心性(mat 是我的边缘列表矩阵)

g1=graph_from_edgelist(mat)
degree.cent <- centr_degree(g1, mode = "all")
degree.cent

我的输出是这样的

> degree.cent
$`res`
 [1] 4 1 4 2 4 1 6 1 2 1 2 1 1 1 1

$centralization
[1] 0.1479592

$theoretical_max
[1] 392

我知道 'degree$res` 是我的中心性分数度量,但我不清楚哪些节点实际上正在接收该分数。我查了一个教程here,但它只说第一个分数是“节点1”。没有迹象表明节点 1 是什么,也没有一种简单的方法来识别它

【问题讨论】:

  • 你想要degree(g1, mode = "all")吗?
  • 是的,这也有效!

标签: r igraph network-analysis


【解决方案1】:

首先,您得到的结果不正确,因为某些名称包含空格(Eric、Marry、Heather、...)。所以,让

mat <- gsub(" ", "", mat)
g1 <- graph_from_edgelist(mat)
degree.cent <- centr_degree(g1, mode = "all")

现在我们可以提取相应的顶点名称并将它们与您的结果结合起来:

setNames(degree.cent$res, V(g1)$name)
#      Jim     Eric     Mary      Tim    Erica     Matt  Loranda     Beth  Heather 
#        4        5        2        4        1        6        2        2        2 
#  Patrick Courtney     John 
#        2        1        1 

【讨论】:

  • 太棒了!您是否知道一个简单的功能,可以根据人名将这些计数数据重新包含到宽格式数据框中?就像“如果名称是”吉姆“在行中添加一个包含度中心性分数的新列中的新单元格?我知道我可以使用 for 循环语句,但我试图在计算上保守
  • 还有为什么空格会在函数中产生问题?
  • @M76,我想已经有一个专栏Name 左右。在这种情况下,您可能需要merge(df, cbind(Centrality = degree.cent$res, Name = V(g1)$name)) 之类的东西。您也可以从dplyr 中查看?join。单独的空间不会产生问题(尽管它们很容易出现在任何步骤中)。问题是这两种类型的名称都有 - 有空格和没有空格,比如“Eric”和“Eric”。因此,图中的实体太多。所以,实际的问题是名称不一致。
  • 太棒了!这解释了一切
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 2022-11-02
  • 2019-01-17
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
相关资源
最近更新 更多