【发布时间】: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。我相信现在它们应该从边缘属性转换为顶点属性,这样人们仍然知道谁是用户,哪个是推文,但我不确定关于如何将其合并到代码中。
【问题讨论】: