我有一个详细说明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
答案 0 :(得分:14)
一个选项是network包,它是用于统计社交网络分析的statnet R系列包的一部分。它以稀疏的方式处理网络数据,这对于较大的数据集很有用。
下面,我执行以下操作:
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)
答案 1 :(得分: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)
答案 2 :(得分:0)
我也一直在igraph工作。创建图形的一种方法是将所有“从”到“节点”的列表写出到文本文件中,将其作为图形对象读回。图形对象可以经受许多图形理论过程,并且可以处理相当大的网络。
答案 3 :(得分:0)
根据我的经验,igraph是我最喜欢的大型图形理论工作包。它具有内存效率,并且具有一些非常好的算法。 igraph使用类似内部边缘列表的数据结构
对于更简单/更小的东西,我倾向于使用'sna'包(“社交网络分析”)。它非常适合交互式工作和小型网络的绘图。 sna使用了更多的邻接矩阵数据结构。