使用一个csv文件确定另一个csv文件中的哪些属性与R中的igraph一起显示在图形中

时间:2013-07-09 03:32:59

标签: r igraph

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

1 个答案:

答案 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)

example figure

现在,如果要删除不在D1中的那些,请执行以下操作:

G2 <- delete.vertices(G, setdiff(D2[,1], c(D1[,1], D1[,2])))
plot(G2)