从大型网络中的数据框设置顶点属性

时间:2017-03-19 15:47:00

标签: r igraph

我想在大型网络(20k节点)中设置顶点属性。为简单起见,这里是边缘列表的一个示例:

library(igraph)
el <- matrix( c(1, 2,1,3,1,4,2,3,2,5,3,6,3,7,3,8,3,9,12,13,13,14 ), nc = 2, byrow = TRUE)
el[,1] = as.character(el[,1])
el[,2] = as.character(el[,2])
g = graph.data.frame(el,directed=FALSE)

另外,我有一个如下所示的数据框:

ID = c(1,2,3,4,5,6,7,8,9,NA,NA)
Attr1 = c(12,13,14,NA,14,13,16,NA,24,13,15) 
Attr2 = c(NA, "bb", "cc","ff","dd",NA,"hh",NA,"kk","dd","cc") 
Attributes = data.frame(ID, Attr1, Attr2)
rm(Attr1)
rm(Attr2)
rm(ID)       

我想使用Attributes数据框中的数据作为顶点属性。如在该示例中,一些数据丢失(例如,网络中的一些顶点未在属性数据帧中表示)。数据框中的行数与顶点数相匹配。 我想使用ID来添加属性进行匹配(edgelist中的ID和Attributes数据框大致相同,但有些ID只在edgelist或dataframe中)。

2 个答案:

答案 0 :(得分:2)

set_vertex_attr会这样做

更新答案,以便从数据框中获取名称和值

for(cn in colnames(Attributes)) {
    g = set_vertex_attr(g, cn,  1:nrow(Attributes), value=Attributes[,cn])
}

答案 1 :(得分:1)

有一种快速设置属性的方法,你可以考虑。

V(g)$ID <- c(1,2,3,4,5,6,7,8,9,NA,NA)
V(g)$Attr1 <- c(12,13,14,NA,14,13,16,NA,24,13,15) 
V(g)$Attr2 <- c(NA, "bb", "cc","ff","dd",NA,"hh",NA,"kk","dd","cc")