R:创建具有节点属性的 'statnet' 网络
R: creating a 'statnet' network with node attributes
我正在按照此处的示例使用 http://personal.psu.edu/drh20/papers/v24i09.pdf 中的“statnet”库。
第一个示例展示了如何在 R 中检查 statnet 网络对象:
library(statnet)
library(network)
data("faux.magnolia.high")
fmh <- faux.magnolia.high
summary(fmh)
上面的例子,这里好像这个例子中的statnet网络已经有了“节点属性”。
使用 statnet 库,有谁知道是否有办法直接从数据帧创建具有节点属性的网络?
例如,如果我有一些数据如下所示:
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)
但我不确定这是否创建了具有节点属性(颜色和食物)的网络。
我也试过这个,但是没用:
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
谢谢
这会是答案吗? https://igraph.org/r/doc/graph_from_data_frame.html
library(igraph)
g <- graph_from_data_frame(mydata, directed=TRUE, vertices=Nodes)
Igraph 可以,但如果您想保留在网络包中,即 statnet 套件,您可以执行以下操作:
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()
如果您有很多顶点属性,您可以使用“应用”将 set.vertex.attribute 作为函数应用到具有顶点属性的数据框的列上。
一般来说,Michael Heaney 的 statnet 套件材料(教程)对我非常有用(材料链接在标题为“夏季研讨会”的第一个项目符号中):http://michaeltheaney.com/teaching
我正在按照此处的示例使用 http://personal.psu.edu/drh20/papers/v24i09.pdf 中的“statnet”库。
第一个示例展示了如何在 R 中检查 statnet 网络对象:
library(statnet)
library(network)
data("faux.magnolia.high")
fmh <- faux.magnolia.high
summary(fmh)
上面的例子,这里好像这个例子中的statnet网络已经有了“节点属性”。
使用 statnet 库,有谁知道是否有办法直接从数据帧创建具有节点属性的网络?
例如,如果我有一些数据如下所示:
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)
但我不确定这是否创建了具有节点属性(颜色和食物)的网络。
我也试过这个,但是没用:
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
谢谢
这会是答案吗? https://igraph.org/r/doc/graph_from_data_frame.html
library(igraph)
g <- graph_from_data_frame(mydata, directed=TRUE, vertices=Nodes)
Igraph 可以,但如果您想保留在网络包中,即 statnet 套件,您可以执行以下操作:
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()
如果您有很多顶点属性,您可以使用“应用”将 set.vertex.attribute 作为函数应用到具有顶点属性的数据框的列上。
一般来说,Michael Heaney 的 statnet 套件材料(教程)对我非常有用(材料链接在标题为“夏季研讨会”的第一个项目符号中):http://michaeltheaney.com/teaching