我想在大型网络(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中)。
答案 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")