通过使id从一开始准备igraph输入数据
我有一个有三列的数据库,前两列表示图的顶点ID,而第三列表示它们之间的距离通过使id从一开始准备igraph输入数据,r,igraph,R,Igraph,我有一个有三列的数据库,前两列表示图的顶点ID,而第三列表示它们之间的距离 cbind(id1=c(10,10,30,12,400,30),id2=c(11,12,400,30,10,79),dist=c(1000,20000,30123,1233,20200,400)) id1 id2 dist [1,] 10 11 1000 [2,] 10 12 20000 [3,] 30 400 30123 [4,] 12 30 1233 [5,] 400 10 20
cbind(id1=c(10,10,30,12,400,30),id2=c(11,12,400,30,10,79),dist=c(1000,20000,30123,1233,20200,400))
id1 id2 dist
[1,] 10 11 1000
[2,] 10 12 20000
[3,] 30 400 30123
[4,] 12 30 1233
[5,] 400 10 20200
[6,] 30 79 400
为了让igraph包读取这些数据,顶点ID必须是连续的,并且从一开始。比如说:
id1 id2 dist
[1,] 1 2 1000
[2,] 1 3 20000
[3,] 4 5 30123
[4,] 3 4 1233
[5,] 5 1 20200
[6,] 4 6 400
有人能给我建议一种自动完成的方法吗?
此外,我还想创建一个转换表,其中包含ID的原始名称和新名称:
old_id new_id
[1,] 1 1
[2,] 11 2
[3,] 12 3
[4,] 30 4
[5,] 400 5
[6,] 79 6
提前感谢您的帮助
为了让igraph包读取这些数据,顶点ID必须是连续的,并且从一开始
这实际上并不完全正确,您可以使用符号ID:
library(igraph)
mat <- cbind(id1 =c(10, 10, 30, 12, 400, 30),
id2 =c(11, 12, 400, 30, 10, 79),
dist=c(1000,20000,30123,1233,20200,400))
g <- graph.data.frame(as.data.frame(mat))
g
# IGRAPH DN-- 6 6 --
# + attr: name (v/c), dist (e/n)
V(g)$name
# [1] "10" "30" "12" "400" "11" "79"
str(g)
# IGRAPH DN-- 6 6 --
# + attr: name (v/c), dist (e/n)
# + edges (vertex names):
# [1] 10 ->11 10 ->12 30 ->400 12 ->30 400->10 30 ->79
库(igraph)
垫12 30->400 12->30 400->10 30->79
确实容易多了:)我错过了这个基本功能!谢谢