【问题标题】:Manipulating edgelist in a network graph in R在 R 中的网络图中操作边缘列表
【发布时间】:2021-10-23 22:12:27
【问题描述】:

我有一个edgelist,它具有以下列fromto。这表示节点之间的边。

from = c("10009", "10009",  "10009", "10009",  "10011", "10011", ...)
to = c("23908", "230908", "230908", "230908", "230514", "230514", ...)

edgelist = data.frame(from, to)
nodes = c("10009", "10011", "230908", "230514" ...)

然后我创建了一个网络对象,转换为图形对象,以计算其中心性度量:

library(network)
library(qgraph)
library(igraph)

network_el = network(edgelist, vertex.attr = nodes, directed=T) #network object

g = asIgraph(network_el) #convert to graph object

centrality = centrality_auto(g) #calculate Centrality

df = data.frame(centrality$edge.betweenness.centrality) #extract edge betweenness centrality into a dataframe

这给了我一个包含 c("from", "to", "centrality") 列的数据框。但是,“from”和“to”不再是edgelist 中列出的原始节点名称。它们已被转换为不同的 ID,从 1...开始到最后一行。

#my current results
from = c("1","2","3","4"...)
to = c("6", "100", "204", ...)
edge.betweenness.centrality = c(4653193, 20188105, ...)

如何合并原始节点名称?我需要识别实际的“from”和“to”(即节点数据),例如:

#my desired results
from = c("10009", "10009", "10009", "10009", "10011"...) #rather than 1,2,3..
to = c("23908", "230908", "230908", "230908", "235014",...)
edge.betweenness.centrality = c(4653193, 20188105, ...)

【问题讨论】:

  • 如果我们知道结构是什么样的,而无需自己构建数据集,则更容易提供帮助。请包含一个最小可重复的示例,包括library 调用和您预期结果的描述
  • 感谢您的帮助,编辑了我的问题以使其更清晰。

标签: r network-analysis


【解决方案1】:

我认为这可行 - 节点 ID 现在已恢复原状!

#Assign as dictionary
dict <- data.frame(name = V(g)$vertex.names)
dict <- data.frame (row.names(dict), dict)

#Replace with dictionary values
df$from <- with(dict, name[match(df$from, row.names.dict.)])
df$to <- with(dict, name[match(df$to, row.names.dict.)])

【讨论】:

    【解决方案2】:

    这是一个使用 igraph 的示例:

    library(igraph)
    

    我们创建一个带有显式顶点名称的示例图:

    g <- sample_pa(length(letters), m=2, directed=F)
    V(g)$name <- letters
    

    计算边缘介数并将其保存到边缘属性:

    E(g)$eb <- edge_betweenness(g)
    

    现在是您要求的数据框,带有原始顶点名称:

    > as_data_frame(g)
       from to        eb
    1     a  b 12.831818
    2     a  c 16.524242
    3     b  c 25.700000
    4     c  d 30.812879
    5     b  d 12.464394
    ...
    ...
    

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2020-12-16
      相关资源
      最近更新 更多