首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:创建具有节点属性的'statnet‘网络

R:创建具有节点属性的'statnet‘网络
EN

Stack Overflow用户
提问于 2020-11-16 11:14:47
回答 2查看 343关注 0票数 0

我在这里遵循了在http://personal.psu.edu/drh20/papers/v24i09.pdf中使用"statnet“库的示例。

第一个示例显示如何检查R中的statnet网络对象:

代码语言:javascript
复制
library(statnet)
library(network)
 data("faux.magnolia.high") 
 fmh <- faux.magnolia.high 
summary(fmh)

在上面的例子中,这里看起来这个例子中的statnet网络已经有了“节点属性”。

使用statnet库,有没有人知道是否有一种方法可以直接从数据帧中创建具有节点属性的网络?

例如,如果我有一些如下所示的数据:

代码语言:javascript
复制
mydata <-data.frame(

"source" = c("123","124","123","125","123"),
"target" = c("126", "123", "125", "122", "111"),
"color" = c("red","red","green","blue","red"),
"food" = c("pizza","pizza","cake","pizza","cake")
)

假设我有一个预定义的节点属性列表:

代码语言:javascript
复制
Nodes <-data.frame(

"source" = c("123","124","125","122","111", "126"),

"Country" = c("usa", "uk", "uk", "usa", "uk", "usa")

)

我尝试了以下代码:

代码语言:javascript
复制
net = network(mydata)

但我不确定这是否创建了一个具有节点属性(颜色和食物)的网络。

我也试过了,但不起作用:

代码语言:javascript
复制
mydata <-data.frame(

"source" = c("123","124","123","125","123"), "target" = c("126", "123", "125", "122", "111"), "color" = c("red","red","green","blue","red"), "food" = c("pizza","pizza","cake","pizza","cake") )

Nodes <-data.frame(

"source" = c("123","124","125","122","111", "126"),

"Country" = c("usa", "uk", "uk", "usa", "uk", "usa")

)

net<-network(mydata[,c[1:2])

edges <- as.sociomatrix(mydata[,c(3:4)],simplify=TRUE)

nodes <- as.sociomatrix(Nodes,simplify=TRUE)

final <- as.sociomatrix(list(net,edges,nodes))

有人能告诉我如何用节点属性创建网络吗?

来源:https://rdrr.io/github/statnet/network/man/as.sociomatrix.html

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-16 14:32:03

这可能是答案吗?https://igraph.org/r/doc/graph_from_data_frame.html

代码语言:javascript
复制
library(igraph)

g <- graph_from_data_frame(mydata, directed=TRUE, vertices=Nodes)
票数 0
EN

Stack Overflow用户

发布于 2020-11-16 21:52:05

Igraph是可以的,但如果您想保留在network包中,也就是statnet套件,您可以执行以下操作:

代码语言:javascript
复制
net<- as.network(mydata, matrix.type = "edgelist")
set.vertex.attribute(net, "color", as.character(mydata$color))
set.vertex.attribute(net, "food", as.character(mydata$food))
#To verify...
get.vertex.attribute(net, "color")

看起来set.vertex.attribute函数不接受因子,因此as.character()

如果您有很多顶点属性,您可以使用" apply“将set.vertex.attribute作为函数应用到具有顶点属性的数据框的列上。

一般来说,来自Michael Heaney的statnet套件的材料(教程)对我非常有用(在标题为“夏季研讨会”的第一个项目中链接的材料):http://michaeltheaney.com/teaching

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64852237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档