r - igraph r 中的合约顶点保留所有节点属性?

标签 r igraph

我需要合并图的多个顶点。我使用了 igraph contract 函数,它运行良好,但不允许我获取原始类型数据。此外,该函数不会删除折叠的顶点(示例中:4 和 8)。

G <- graph.ring(10)
V(G)$character <- rep(c("attr1","attr2"),5)
V(G)$numeric <- rep(1:5,2)
V(G)$newId <- c(1,2,3,3,5,6,7,7,9,10)

G1 <- contract(G, V(G)$newId, vertex.attr.comb = toString)

par(mfrow=c(1,2))
plot(G)
plot(G1)

除了对折叠顶点的值进行分组之外,结果仅生成字符格式值。我尝试了 vertex.attr.comb 的不同选项。因为我有字符和数字数据,所以求和选项不起作用,并且“第一个”或“最后一个”不保留所有数据。其他选项(例如列出所有属性)不起作用。

因此,我不知道如何为每个顶点获取单个值而不是两个或多个,也不知道如何操作获得的值。

此外,我必须删除折叠的顶点。就我而言,我可以使用 delete.vertices (G,V(KeyW)[level(G)==0) 来完成此操作,但当它们打算成为时,它似乎不是理想的解决方案与原网络保持隔离。 提前致谢。

最佳答案

更新

如果您想要对每个节点的属性进行一些额外的操作,您可以使用lapply,如下所示

V(G1)$numeric <- unlist(lapply(V(G1)$numeric, sum))

你将获得

> V(G1)$numeric
 [1] 1 2 7 0 5 1 5 0 4 5

contract 图和包装属性

我想你可以尝试连接属性,例如,vertex.attr.comb = c

G1 <- contract(G, V(G)$newId, vertex.attr.comb = c)

并且G1的属性保存在列表中,例如,

> str(V(G1)$character)
List of 10
 $ : chr "attr1"
 $ : chr "attr2"
 $ : chr [1:2] "attr1" "attr2"
 $ : chr(0)
 $ : chr "attr1"
 $ : chr "attr2"
 $ : chr [1:2] "attr1" "attr2"
 $ : chr(0) 
 $ : chr "attr1"
 $ : chr "attr2"

> str(V(G1)$numeric)
List of 10
 $ : int 1
 $ : int 2
 $ : int [1:2] 3 4
 $ : int(0)
 $ : int 5
 $ : int 1
 $ : int [1:2] 2 3
 $ : int(0)
 $ : int 4
 $ : int 5

> str(V(G1)$newId)
List of 10
 $ : num 1
 $ : num 2
 $ : num [1:2] 3 3
 $ : num(0)
 $ : num 5
 $ : num 6
 $ : num [1:2] 7 7
 $ : num(0)
 $ : num 9
 $ : num 10

关于r - igraph r 中的合约顶点保留所有节点属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77413654/

相关文章:

r - 仅绘制具有特定权重的边 - igraph

随机删除n条边而不断开图

python - 使用 igraph 高效计算具有 23000000 个节点的图的最短路径数

r - 如何在保持布局固定的同时为不断增长的图形设置动画?

r - 如何巧妙地将矩阵的列列出到数据框中,同时保留列名称?

R比较相应的单元格并创建一个以内容命名的新列

javascript - 有没有办法从 JavaScript 运行 R 代码?

r - 手工编写 BFS 搜索算法

r - 带标签的R中的水平树状图

r - CRAN(或其任何亲属)是否有 API?