提问人:Sebastián 提问时间:11/10/2023 最后编辑:Sebastián 更新时间:11/12/2023 访问量:41
在 igraph 收缩网络中处理顶点属性
Handling vertex attribute in an igraph shrinked network
问:
此查询紧随另一个查询(igraph r 中的合同顶点保留所有节点属性?)之后,该查询涉及折叠保留属性信息的网络。我一直在尝试从 igraph 属性对象中提取文本。这些属性不是原子向量,因为它们是 igraph 的合约函数的结果,作为获取字符和数字属性数据的一种方式:
g <- graph_from_literal(1,2-3-4,5-6,7).
V(g)$label <- c("wood", "wood products", "work", "work environment",
"work environments", "young", "young consumers")
V(g)$number <- c(1,2,1,2,1,2,2)
g <- contract(g, mapping=c(1,1,3,4,4,6,7), vertex.attr.comb=c)
g <- delete.vertices(g, which(V(g)$name=="character(0)"))
我只需要获得一个标签,例如第一个标签,如果有多个标签。我试过:
first <- stri_extract_first_regex(V(g)$label, "[a-z]+")
但是,在单个文本的情况下,结果会产生“c”,而不是相应的标签。
提前致谢。
答:
0赞
ThomasIsCoding
11/10/2023
#1
如果需要保留所有属性的第一个条目,则应使用vertex.attr.comb = first
g <- contract(g, mapping = c(1, 1, 3, 4, 4, 6, 7), vertex.attr.comb = first)
你会看到
> V(g)$label
[[1]]
[1] "wood"
[[2]]
character(0)
[[3]]
[1] "work"
[[4]]
[1] "work environment"
[[5]]
character(0)
[[6]]
[1] "young"
[[7]]
[1] "young consumers"
> V(g)$name
[[1]]
[1] "1"
[[2]]
character(0)
[[3]]
[1] "3"
[[4]]
[1] "4"
[[5]]
character(0)
[[6]]
[1] "6"
[[7]]
[1] "7"
此外,如果要删除具有“空”属性的顶点,可以尝试
g <- contract(g, mapping = c(1, 1, 3, 4, 4, 6, 7), vertex.attr.comb = first)
g <- delete.vertices(g, lengths(V(g)$name) == 0)
然后你会看到
> V(g)$label
[[1]]
[1] "wood"
[[2]]
[1] "work"
[[3]]
[1] "work environment"
[[4]]
[1] "young"
[[5]]
[1] "young consumers"
> V(g)$name
[[1]]
[1] "1"
[[2]]
[1] "3"
[[3]]
[1] "4"
[[4]]
[1] "6"
[[5]]
[1] "7"
评论
0赞
Sebastián
11/12/2023
谢谢。但这样一来,我就会丢失有关其他属性的信息(正如我所提到的,现在包含在示例中)。对于该属性,我必须保留所有信息(作为值的总和)。这就是为什么我在vertex.attr.comb中需要“c”选项而不是“first”,否则我会丢失信息。
0赞
Sebastián
11/12/2023
基于@Axeman,我用以下方法求解:V(g)$label <- sapply(V(g)$label, , 1) ;和:V(g)$number <- unlist(lapply(V(g)$number, sum))[
0赞
ThomasIsCoding
11/13/2023
@Sebastián是的,当然你可以用它来获取第一个而不是,绝对取决于你的需要sapply
vertex.attr.combo = first
评论
Error in contract(g, mapping = c(1, 1, 3, 4, 4, 4, 6, 7), vertex.attr.comb = c) : At core/operators/contract.c:78 : Invalid mapping vector length, Invalid value
sapply(V(g)$label, `[`, 1)