首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用R中的附加信息从邻接列表中创建igraph?

如何利用R中的附加信息从邻接列表中创建igraph?
EN

Stack Overflow用户
提问于 2017-08-30 10:48:35
回答 1查看 336关注 0票数 2

我在表格中有相当广泛的网络数据

代码语言:javascript
复制
df <- data.frame(name= c("Sue", "Rob", "Jacob", "Terry"), 
                 f1 = c("Rob", "Sue", "Rob", "Jacob"), 
                 f2 = c(NA, "Terry", "Terry", NA),
                 f3 = c(NA, "Jacob", NA, NA), 
                 bf1 = c(1,1,1,0), 
                 bf2 = c(NA, 1, 0, NA), 
                 bf3 = c(NA, 0, NA, NA) )

f1f3的变量指的是苏、罗布、雅各布和特里的朋友。变量bf1 to bf3指的是他们是否认为他们是最好的朋友。

现在,我想基于这个数据创建一个带有R igraph的图形项目,并包含所有信息。到目前为止,我已经:

代码语言:javascript
复制
adj_list <- subset(df, select = c(name, f1:f3))
m <- as.matrix(adj_list)
el1 <- cbind(m[, 1], c(m[, -1]))
el1 <- el1[complete.cases(el1),]
el1[2,] <- as.numeric(factor(c(el1[1,])))
g1 <- graph_from_edgelist(el1)

但我不知道如何把次要信息放到图形对象中。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-30 14:38:37

一种方法是将数据重组为长格式。

代码语言:javascript
复制
# Get indices of columns to group together
friendsIndices <- with(dat, grep("^f", names(dat))) # strings beginning with 'f`
bffIndices <- with(dat, grep("^bf", names(dat))) # strings beginning with 'bf`

重塑

代码语言:javascript
复制
ldat <- reshape(dat, 
                varying=list(friendsIndices, bffIndices),
                direction="long", idvar="name")

# Tidy up long data -
  # remove time column
  # remove rows with `NA`
ldat <- ldat[!is.na(ldat$f1), -match("time", names(ldat))]
ldat
#          name    f1 bf1
# Sue.1     Sue   Rob   1
# Rob.1     Rob   Sue   1
# Jacob.1 Jacob   Rob   1
# Terry.1 Terry Jacob   0
# Rob.2     Rob Terry   1
# Jacob.2 Jacob Terry   0
# Rob.3     Rob Jacob   0

现在可以将数据读入igraph

代码语言:javascript
复制
library(igraph)
g <- graph_from_data_frame(ldat)

bf属性存储在edge属性E(g)$bf1中。然后,在根据此属性绘图时,可以添加边缘颜色或权重。

代码语言:javascript
复制
plot(g, 
     edge.width=2*(E(g)$bf1+1), 
     edge.color=c("red", "blue")[E(g)$bf1+1],
     edge.curved=TRUE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45958451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档