在R中操作网络数据

在R中操作网络数据,r,networking,social-networking,R,Networking,Social Networking,我有一个数据框,详细说明了N个节点之间的边权重。是否有处理此类数据的软件包 例如,我想将以下信息绘制为一个网络: 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 一种选择是软件包,它是用于统计社会网络分析的R软件包系列的一部分。它以稀疏的方式处理

我有一个数据框,详细说明了N个节点之间的边权重。是否有处理此类数据的软件包

例如,我想将以下信息绘制为一个网络:

  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
一种选择是软件包,它是用于统计社会网络分析的R软件包系列的一部分。它以稀疏的方式处理网络数据,这对于较大的数据集很好

在下文中,我做了以下工作:

  • 将edgelist(前两列)加载到网络对象中
  • 将计数指定为称为权重的边属性
  • 用gplot绘制网络。(有关更改边缘厚度的信息,请参见帮助页。)
  • 绘制一个社会矩阵(仅5x5组表示邻接矩阵的块,其中(i,j)单元格由相对计数着色)
A=read.table(file=“so.txt”,header=T) A. p1 p2计数 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 图书馆(网络) 网络=网络(A[,1:2]) #获取有关网络的摘要信息 网 网络属性: 顶点=5 定向=真 hyper=FALSE 循环=错误 多重=假 二部=假 总边数=9 缺少边=0 非缺失边=9 顶点属性名称: 顶点名称 邻接矩阵: a、b、c、d、e a 0110 B0011 C001 D001 e 0 0 0 0 0 0 set.edge.attribute(净重,A[,3]) gplot(净) ##另一个很酷的功能 s=as.socialmatrix(净,attrname=“重量”) 社会矩阵图(s)
以下是如何在中绘制数据的网络图:


d我也在igraph工作。创建图形的一种方法是将所有“从”“到”节点的列表写入文本文件,并将其作为图形对象读回。图形对象可以经历许多图论过程,可以处理相当大的网络。

根据我的经验,IGRAPHE是我最喜欢的大型图论工作包。它的内存效率很高,并且有一些非常好的算法。igraph使用类似于edgelist的内部数据结构。

对于更简单/更小的事情,我倾向于使用“sna”软件包(“社交网络分析”)。它非常适合交互式工作和绘制较小的网络。sna使用了更多的邻接矩阵数据结构。

答案很好!非常有帮助! 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)
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)