我有一个图表存储为数据框,每行代表一个链接。图中的某些节点具有一组别名。我想要做的是将别名信息合并到图表中。例如,图表是
node1 node2
1 A E
2 B F
3 C G
节点A具有别名A1,A2,节点E具有别名E1,E2,因此{A,A1,A2}和{E,E1,E2}之间的所有连接都被添加到数据帧。我想我可以使用igraph包来实现这一点。
答案 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)