R: criando uma rede 'statnet' com atributos de nó
Estou seguindo os exemplos aqui sobre como usar a biblioteca "statnet" em http://personal.psu.edu/drh20/papers/v24i09.pdf.
O primeiro exemplo mostra como inspecionar um objeto de rede statnet em R:
library(statnet)
library(network)
data("faux.magnolia.high")
fmh <- faux.magnolia.high
summary(fmh)
No exemplo acima, parece aqui que a rede statnet neste exemplo já possui "atributos de nó".
Usando a biblioteca statnet, alguém sabe se existe uma maneira de criar diretamente uma rede com atributos de nó a partir de um quadro de dados?
Por exemplo, se eu tiver alguns dados parecidos com estes:
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")
)
Suponha que eu tenha uma lista predefinida de atributos do nó:
Nodes <-data.frame(
"source" = c("123","124","125","122","111", "126"),
"Country" = c("usa", "uk", "uk", "usa", "uk", "usa")
)
Tentei o seguinte código:
net = network(mydata)
Mas não tenho certeza se isso criou uma rede com os atributos do nó (cor e comida).
Eu também tentei isso, mas não funcionou:
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))
Alguém pode me mostrar como criar uma rede com atributos de nó?
fonte: https://rdrr.io/github/statnet/network/man/as.sociomatrix.html
obrigado
Respostas
Poderia esta ser a resposta? https://igraph.org/r/doc/graph_from_data_frame.html
library(igraph)
g <- graph_from_data_frame(mydata, directed=TRUE, vertices=Nodes)
Igraph está OK, mas se você quiser permanecer dentro do pacote de rede, que é a suíte statnet, você pode fazer o seguinte:
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")
Parece que a função set.vertex.attribute não aceita fatores, portanto, as.character ()
Se você tiver muitos atributos de vértice, poderá usar "aplicar" para aplicar o set.vertex.attribute como uma função sobre colunas de um quadro de dados com atributos de vértice.
Geralmente, os materiais (tutoriais) para o pacote statnet de Michael Heaney foram muito úteis para mim (materiais vinculados no primeiro item sob o título "Workshops de verão"): http://michaeltheaney.com/teaching