在图表中添加连接

时间:2014-04-30 15:48:52

标签: r graph igraph

我有一个图表存储为数据框,每行代表一个链接。图中的某些节点具有一组别名。我想要做的是将别名信息合并到图表中。例如,图表是

  node1 node2
1     A     E
2     B     F
3     C     G

节点A具有别名A1,A2,节点E具有别名E1,E2,因此{A,A1,A2}和{E,E1,E2}之间的所有连接都被添加到数据帧。我想我可以使用igraph包来实现这一点。

1 个答案:

答案 0 :(得分:1)

让我们将别名计数存储在具有行名称的查找表中:

> aliases=data.frame(count=c(1,2,2,3,2,1))
> row.names(aliases)=c("A","B","C","E","F","G")

此函数展开数据框的一行,并将原始数字用零编号:

expand.row=function(r){
  e1=r[1];e2=r[2]
  n1=aliases[e1,1];n2=aliases[e2,1]
  expand.grid(
    paste(e1,seq_len(n1)-1,sep=""),
    paste(e2,seq_len(n2)-1,sep=""))
  }

那样:

> expand.row(c("B","E"))
  Var1 Var2
1   B0   E0
2   B1   E0
3   B0   E1
4   B1   E1
5   B0   E2
6   B1   E2

然后应用于边缘数据帧,将这些位合并为一个矩阵:

> full = do.call(rbind,apply(as.matrix(d),1,expand.row))
> full
  Var1 Var2
1   A0   E0
2   A0   E1
3   A0   E2
4   B0   F0
5   B1   F0
6   B0   F1
7   B1   F1
8   C0   G0
9   C1   G0

并且有你的图表:

> g = graph.edgelist(as.matrix(full))
> plot(g)

enter image description here