2016-10-28 44 views
1
> nodes1 <- c('A','B','C') 
> nodes2 <- c('S','C','B') 
> values <- c(1.0,0.45,0.44) 
> data <- data.frame(nodes1,nodes2,values) 

Кадр данных имеет три столбца. Первые два столбца обозначают узлы, а третий столбец обозначает вес между ними. Это неориентированный граф. Я просмотрел документацию пакета networkD3, но не смог найти простой способ сделать это.Как построить неориентированную сеть, используя следующий фрейм данных в R?

Благодарим вас в Advance!

ответ

1

Я думаю, что вы можете использовать igraph, ширина края определяется значением в столбце в dataframe.

library("igraph") 
graph <- make_graph(t(data[,c("nodes1" , "nodes2")]), directed = F) 
E(graph)$weight <- data$values 
plot.igraph(graph, edge.width=E(graph)$weight) 
0

Чтобы использовать функцию forceNetwork() в networkD3, вам нужно один кадр данных для ссылки и один кадр данных для узлов. Используя свои векторы выше, вы можете создать соответствующие кадры данных и передать их в forceNetwork(), как это ...

library(networkD3) 
nodes <- data.frame(id = unique(c(nodes1, nodes2)), group = 1) 
links <- data.frame(source = match(nodes1, nodes$id) - 1, 
        target = match(nodes2, nodes$id) - 1, 
        value = values) 
forceNetwork(Links = links, Nodes = nodes, Source = 'source', Target = 'target', 
      Value = 'value', NodeID = 'id', Group = 'group') 

Рама nodes данных требуется один столбец для «ид» или имя каждого узла и один столбец для группу каждого узла (которую вы можете установить только 1, если они не сгруппированы). После запуска кода выше, кадр данных nodes выглядит следующим образом ...

id group 
1 A  1 
2 B  1 
3 C  1 
4 S  1 

Рам links данных должен-строка для каждой ссылки/краев, и один столбец для источника «» в ссылке, один столбец для «цели» каждой ссылки и одного столбца для «значения» для каждой ссылки. Значения «источник» и «цель» равны индексу узла в фрейме данных nodes, на который они ссылаются, но они должны быть проиндексированы нулями для работы с базовым JavaScript. После выполнения приведенного выше кода фрейм данных links выглядит следующим образом:

source target value 
1  0  3 1.00 
2  1  2 0.45 
3  2  1 0.44