"Preserving" 具有内置函数的边缘属性
"Preserving" edge attributes with in built function
此 post 与
有关
post 的基本问题是如何通过普通转推用户连接节点。 @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。我相信现在应该将它们从边属性转换为顶点属性,这样人们仍然知道谁是用户,哪条是推文,但我不确定关于如何将其合并到代码中。
您可以试试下面的代码
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
此 post 与
post 的基本问题是如何通过普通转推用户连接节点。 @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。我相信现在应该将它们从边属性转换为顶点属性,这样人们仍然知道谁是用户,哪条是推文,但我不确定关于如何将其合并到代码中。
您可以试试下面的代码
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