背景:使用igraph,我正在从一个充满边缘的csv文件构建图形。 CSV文件包含每条边的两端的ID,并且还包含一半边的标签(发生在双模图中的另一半节点没有有趣的名称)。因此,CSV文件如下所示:
"startid" "endid" "an unimportant colummn" "another unimportant column" "labelname"
person00001 thing00001 10 10 "Arthur"
person00002 thing00001 10 10 "Bob"
我使用以下方式阅读了表格:
edges<-read.table("myfile.csv", header=T)
我使用
生成图表 g <- graph.edgelist(as.matrix(edges[,c(1,2)]),directed=F)
工作正常,但标签名不作为顶点标签放置。现在,我可以告诉R g应该使用
具有'label'属性 g<-set.vertex.attribute(g,'label',1,'')
但是我仍然需要填写我的csv文件中的值,这就是我遇到的问题。 如果我尝试使用单个值,我可以使用边缘[match('person00001',edges $ startid),]从边缘检索适当的行集,并且我可以使用
组合行 unique(edges$fullname[edges$id1=='person00001'])
但是我无法弄清楚如何从第一场比赛中获得我想要的单个值(R表示有'n级别:亚瑟,鲍勃等'。如果我能得到那个单一值,我可以循环通过所有'人'的顶点名称子集,并使用以下内容将它们设置为CSV中的名称:
V(g)$label <- ifelse(grepl('person',V(g)$name),GETCORRESPONDING_LABELNAME_BY_LOOKING_UP_STARTID_IN_EDGES,"")
非常欢迎任何建议!我知道这个问题表明对数据框索引的理解不足。罪名成立。