我目前正在使用R.中的igraph。我正在为网络中的个人创建多个图。要创建每个图,我需要读取多个csv文件。第一个csv文件显示了个体及其两次权重关联之间的交互,如下所示:
Individual1,Individual2,Weight
A,A,1
A,B,.2
A,C,.02
B,C,.5
我读到的第二个csv文件是针对这些人的行列。采用以下格式:
Individual,Rank
A,1
B,5
C,3
D,4
E,2
我想使用排名来确定绘图中节点的大小并使用代码:
plot(g, layout=layout.fruchterman.reingold,
vertex.size=V(g)$Rank +20)
我遇到的问题是,与给定情节所观察到的个体相比,总有更多的人具有等级。有没有办法创建一个语句来忽略第二个csv文件中第一个csv文件中不存在的任何个人?
答案 0 :(得分:3)
嗯,您可以在创建图表之前将其删除,也可以在绘制图表时将其删除。 E.g。
library(igraph)
D1 <- read.csv(textConnection("#
Individual1,Individual2,Weight
A,A,1
A,B,.2
A,C,.02
B,C,.5"),
header=TRUE, comment.char="#", strip.white=TRUE,
stringsAsFactors=FALSE)
D2 <- read.csv(textConnection("#
Individual,Rank
A,1
B,5
C,3
D,4
E,2"),
header=TRUE, comment.char="#", strip.white=TRUE,
stringsAsFactors=FALSE)
G <- graph.data.frame(D1, vertices=D2)
par(mar=c(0,0,0,0))
plot(G, vertex.size=V(G)$Rank*5+20, edge.arrow.size=.4)
现在,如果要删除不在D1中的那些,请执行以下操作:
G2 <- delete.vertices(G, setdiff(D2[,1], c(D1[,1], D1[,2])))
plot(G2)