微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“保留”具有内置功能的边缘属性

如何解决“保留”具有内置功能的边缘属性

这篇文章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),value = x)
      )
    }
  )
)

plot(gres)
edge.attributes(gres)

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

解决方法

你可以试试下面的代码

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。