R语言igraph bipartite network顶点属性技术咨询
嘿,不用客气呀!新手阶段遇到基础问题太正常了,咱们一步步来搞定这个二分网络的顶点属性问题~
二分网络igraph顶点属性操作指南
第一步:先把二分图构建规范
首先咱们先把你的示例数据整理成清晰的结构,方便后续操作:
| Group | Person | PersonGame | GroupGame |
|---|---|---|---|
| A | Jane Doe | Snooker | Tennis |
| B | John Doe | Football | Football |
| A | Bill Smith | Tennis | Tennis |
| B | Francis Underwood | Football | Football |
| A | Francis Underwood | Football | Tennis |
接下来用igraph的graph_from_data_frame()构建二分图,这个函数能直接从数据框读取边信息,同时咱们要明确标记顶点类型(是Group还是Person)——这对二分图的后续操作至关重要:
library(igraph) # 读入你的CSV文件 df <- read.csv("file.csv", header = TRUE, sep = ",") # 构建二分图:边数据取Group和Person列,同时定义顶点基础属性 df.network <- graph_from_data_frame( d = df[, c("Group", "Person")], directed = FALSE, vertices = data.frame( name = unique(c(df$Group, df$Person)), type = c(rep("Group", length(unique(df$Group))), rep("Person", length(unique(df$Person)))) ) ) # 把边的属性(PersonGame、GroupGame)也添加进去 E(df.network)$PersonGame <- df$PersonGame E(df.network)$GroupGame <- df$GroupGame
这里的type属性是核心,它帮igraph区分二分图的两类顶点,后续筛选、投影操作都要用到它。
第二步:查看顶点属性
想了解当前顶点有哪些属性、属性值是什么,用这些命令就够:
- 查看所有顶点的完整属性列表:
vertex_attr(df.network) - 查看特定属性的所有值:
V(df.network)$type或V(df.network)$name - 查看单个顶点的属性:
V(df.network)["A"]$type(比如查看Group A的类型) - 查看所有顶点属性名称:
list.vertex.attributes(df.network)
第三步:添加/修改顶点属性
如果要给顶点新增属性,或者修改已有属性,可以试试这两种方式:
方式1:基于边属性汇总添加
比如给每个Person顶点汇总他们玩过的所有游戏,给Group顶点汇总对应的组游戏:
# 给Person顶点添加"played_games"属性:去重后合并游戏名称 person_games <- tapply(df$PersonGame, df$Person, function(x) paste(unique(x), collapse = ", ")) V(df.network)[names(person_games)]$played_games <- person_games # 给Group顶点添加"group_games"属性 group_games <- tapply(df$GroupGame, df$Group, function(x) paste(unique(x), collapse = ", ")) V(df.network)[names(group_games)]$group_games <- group_games
方式2:手动批量赋值
比如给不同类型的顶点设置不同颜色,方便绘图区分:
# Group顶点设为浅蓝色,Person顶点设为浅绿色 V(df.network)$color <- ifelse(V(df.network)$type == "Group", "lightblue", "lightgreen")
第四步:基于属性筛选顶点
如果只想操作某一类顶点(比如所有Person),可以用属性筛选:
# 筛选出所有Person类型的顶点 person_vertices <- V(df.network)[type == "Person"] # 查看这些顶点的名称和他们玩过的游戏 person_vertices$name person_vertices$played_games
小提示:后续如果要做二分图投影(比如人员之间的关联、组之间的关联),type属性会是bipartite_projection()函数的关键参数哦~
不用怕基础问题,刚开始接触igraph都会有这些小疑问,慢慢摸索就熟练啦~
内容的提问来源于stack exchange,提问作者otter77
相关产品推荐
相关产品推荐

