0

我目前正在使用 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 文件中的任何个人?

4

1 回答 1

3

好吧,您可以在创建图表之前删除它们,或者您可以在绘制它们时删除它们。例如

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)
于 2013-07-11T17:03:03.960 回答