【问题标题】:"Preserving" edge attributes with in built function使用内置功能“保留”边缘属性
【发布时间】:2021-06-21 17:33:13
【问题描述】:

这篇文章与previous question.相关

那篇文章的基本问题是普通转发用户如何连接节点。 @ThomasIsCoding 建议的代码确实有效。

我的后续问题是如何让这个函数存储边缘属性。我在下面提供了一个玩具示例:

我的初始数据框是这样的:

author.id<-c("A","B","D")
rt_user<-c("C","C","C")
id<-c(1,2,3)

example<-data.frame(author.id,rt_user,id)

其中节点 A、B、D 从节点 C 转发推文,id 列是推文的数字分类器。在网络结构中使用它并应用上述功能导致:

g <- graph.data.frame(example, directed = T)
edge.attributes(g)
   gres <- do.call(
  graph.union,
  lapply(
    names(V(g))[degree(g, mode = "out") == 0],
    function(x) {
      nbs <- names(V(g))[distances(g, v = x, mode = "in") == 1]
      disjoint_union(
        set_vertex_attr(make_full_graph(length(nbs)), name = "name", value = nbs),
        set_vertex_attr(make_full_graph(1), name = "name", value = x)
      )
    }
  )
)

plot(gres)
edge.attributes(gres)

我的目标是在gres 的最终转换中“保留”g 的边缘属性。我想知道 A 使用了推文 1,B 使用了推文 2,D 使用了推文 3。我相信现在它们应该从边缘属性转换为顶点属性,这样人们仍然知道谁是用户,哪个是推文,但我不确定关于如何将其合并到代码中。

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    你可以试试下面的代码

    gres <- set_vertex_attr(gres,
        name = "id",
        value = E(g)$id[match(names(V(gres)), names(tail_of(g, E(g))))]
    )
    

    其中边属性是来自tail_of的特征顶点,你会看到

    > V(gres)$id
    [1]  1  2  3 NA
    

    【讨论】:

      猜你喜欢
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      相关资源
      最近更新 更多