首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过使id从1开始来准备图形输入数据

问通过使id从1开始来准备图形输入数据
EN

Stack Overflow用户
提问于 2013-04-09 18:57:59
回答 1查看 787关注 0票数 0

我有一个包含三列的数据库,前两列表示图的顶点ID,第三列表示它们之间的距离。

代码语言:javascript
复制
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包读取这样的数据,顶点ids需要是连续的,并且从1开始。所以就像这样:

代码语言:javascript
复制
    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

有没有人能建议我一种自动完成的方法?此外,我还想为ids创建包含原始名称和新名称的转换表:

代码语言:javascript
复制
    old_id new_id
[1,]    1    1
[2,]   11    2
[3,]   12    3
[4,]   30    4
[5,]  400    5
[6,]   79    6

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-09 21:49:28

为了让igraph包读取这样的数据,顶点In需要是连续的,并且从1开始。

这实际上并不完全正确,您可以使用符号ids:

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15900043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档