2009-07-23 3 views
10

У меня есть кадр данных, в котором детализируются веса ребер среди N узлов. Есть ли пакет для работы с такими данными?Манипулирование сетевыми данными в R

Например, я хотел бы построить следующую информацию в сети:

p1 p2 counts 
1 a b 100 
2 a c 200 
3 a d 100 
4 b c  80 
5 b d  90 
6 b e 100 
7 c d 100 
8 c e  40 
9 d e  60 

ответ

14

Одним из вариантов является network пакетом, часть statnet семейства пакетов R для статистического анализа социальной сети. Он обрабатывает сетевые данные разреженным образом, что хорошо для больших наборов данных.

Ниже я сделать следующее:

  • нагрузки edgelist (первые два столбца) в сетевой объект
  • назначить счетчики, чтобы быть признаком края называется весом.
  • участок сети с gplot. (См. Страницу справки об изменении толщины краев.)
  • plot sociomatrix (всего 5 × 5 наборов блоков, представляющих матрицу смежности, где ячейка (i, j) затенена относительным подсчетом)
 
A = read.table(file="so.txt",header=T) 
A 
     p1 p2 counts 
    1 a b 100 
    2 a c 200 
    3 a d 100 
    4 b c  80 
    5 b d  90 
    6 b e 100 
    7 c d 100 
    8 c e  40 
    9 d e  60 

library(network) 
net = network(A[,1:2]) 
# Get summary information about your network 
net 
    Network attributes: 
     vertices = 5 
     directed = TRUE 
     hyper = FALSE 
     loops = FALSE 
     multiple = FALSE 
     bipartite = FALSE 
     total edges= 9 
     missing edges= 0 
     non-missing edges= 9 
     Vertex attribute names: 
     vertex.names 
    adjacency matrix: 
     a b c d e 
    a 0 1 1 1 0 
    b 0 0 1 1 1 
    c 0 0 0 1 1 
    d 0 0 0 0 1 
    e 0 0 0 0 0 

set.edge.attribute(net,"weight",A[,3]) 
gplot(net) 

## Another cool feature 
s = as.sociomatrix(net,attrname="weight") 
plot.sociomatrix(s) 
+0

Отличный ответ! Очень полезно! – RHelp

4

Вот как сделать сетевой график данных в igraph:

d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'), 
       p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e'), 
       counts=c(100, 200, 100,80, 90,100, 100,40,60)) 

library(igraph) 
g <- graph.data.frame(d, directed=TRUE) 
print(g, e=TRUE, v=TRUE) 
tkplot(g, vertex.label=V(g)$name) 
0

Я также работал в igraph. Один из способов создания графика - выписать список всех «от» до «узлов» в текстовый файл, который будет прочитан в виде объекта графика. Объект графа может быть подвергнут множеству графических теоретических процессов и может обрабатывать довольно большие сети.

0

По моему опыту, igraph - мой любимый пакет для большой теоретико-графической работы. Это эффективная память и имеет очень хорошие алгоритмы. igraph использует внутреннюю структуру, похожую на edgelist.
Для более простых/мелких вещей я обычно использую пакет «sna» («анализ социальной сети»). Это отлично подходит для интерактивной работы и построения небольших сетей. sna использует больше структуры данных матрицы смежности.

+0

Сетевой пакет также имеет редкую реализацию. –

Смежные вопросы