【问题标题】:Why I am getting wrong neighbors from the graph为什么我从图中得到错误的邻居
【发布时间】:2021-03-20 19:18:10
【问题描述】:

我试图从图中找到一个节点的公共邻居。但是,对于node 8,我得到了the wrong neighbor。从数据集中,我们可以说node 8 的共同邻居是node 5 and 6,但我得到的是node 4 and 5

代码:

graph <- graph_from_data_frame(df_graph, directed = FALSE)
plot(graph, vertex.label = V(graph)$name)
neighbors(graph, 8, mode="all")

输出:

+ 3/8 vertices, named, from a32ba25:
[1] 4 5 8

图表:

你能告诉我为什么我找错了邻居吗?

可重现的数据:

structure(list(To = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 4L, 5L, 8L, 
8L), From = c(7L, 3L, 4L, 7L, 4L, 5L, 4L, 6L, 6L, 5L, 6L)), class = "data.frame", row.names = c(NA, 
-11L))

【问题讨论】:

    标签: r graph igraph neighbours


    【解决方案1】:

    区分顶点名称和顶点索引很重要。如果您使用数值,则表明您正在使用顶点索引。根据创建图表时数据的顺序,索引可能与名称不同。如果你跑

    V(graph)
    # [1] 1 2 3 4 5 8 7 6
    

    这会按索引顺序显示顶点的名称。所以第8个顶点实际上是顶点“6”。如果您想获取名称为“8”的顶点的邻居,那么您需要一个字符值。

    neighbors(graph, "8", mode="all")
    # [1] 5 6
    

    如果您没有使用数字作为顶点名称,这可能会更清楚。在您的 data.frame 中,您的 to 和 from 值可以是您喜欢的任何字符值。该图只会按照遇到的顺序为它们分配一个索引。如果您希望顶点按特定顺序排列。您可以使用vertices= 参数设置该顺序

    graph <- graph_from_data_frame(df_graph, directed = FALSE, vertices=data.frame(name=1:8))
    

    【讨论】:

    • 非常感谢。那么,如果我想在我的数据集中使用1, 2, 3,那么在加载dataframe 后我必须更改什么?
    • 您不必更改数据,只需将这些值用作名称,因此它们必须包含在引号内。如果要设置特定的顶点顺序,可以使用graph_from_data_framevertices= 参数(请参阅更新的答案)。但是索引值总是从 1 开始,然后加 1。如果您希望顶点索引和名称相同,则不能有任何缺失或跳过的值。这就是为什么最好坚持使用一般名称。
    • 谢谢。我们使用1:8,因为我只有8 vertices。所以,如果我有 20 个,那么我必须写 1:20?节点名称的意思是,比如'Node_1、Node_2 和任何东西,而不是 1、2 和整数'?
    • 我的名字只是指使用"1""2"而不是12。字符/字符串值被解释为名称,数值被视为索引。
    • 非常感谢。顺便问一下,有没有办法(一次)而不是一个一个地查看所有节点的所有邻居?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2014-08-23
    • 2020-12-30
    • 2015-12-01
    • 2016-11-25
    • 2017-12-06
    相关资源
    最近更新 更多