iGraph R 中的合约顶点保留所有节点属性?

contract vertices in igraph r preserving all nodes attributes?

提问人:Sebastián 提问时间:11/3/2023 更新时间:11/3/2023 访问量:44

问:

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

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的不同选项。因为我有字符和数字数据,所以总和选项不起作用,“first”或“last”不会保留所有数据。其他选项(如列出所有属性)不起作用。

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

此外,我必须删除折叠的顶点。就我而言,我可以用 来做到这一点,但是当它们打算与原始网络隔离时,这似乎不是理想的解决方案。 提前致谢。delete.vertices (G,V(KeyW)[degree(G)==0)

R iGraph

评论


答:

2赞 ThomasIsCoding 11/3/2023 #1

更新

如果要对每个节点的属性进行一些额外的操作,可以使用如下方法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

评论

0赞 Sebastián 11/3/2023
谢谢托马斯,但是在顶点折叠的情况下,我如何获得总和或第一个值?我尝试了以下表达式,但它返回了以前的数据(分配给折叠的顶点)。''' V(G1)$numeric 2 <- as.numeric(unlist(V(G1)$numeric)) '''
0赞 ThomasIsCoding 11/3/2023
@Sebastián 查看我的更新
0赞 Sebastián 11/3/2023
谢谢@ThomasIsCoding。有了这些信息,你还可以消除值为 0 的顶点(只要其他顶点的总和不同于 0,否则一个简单的方法是在合约函数之前添加一个常量)。