在R中基于DataFrame构建店铺关联网络图遇问题,需按经理数设节点大小
在R中基于店铺-经理数据构建网络图
步骤1:准备环境和数据
先安装并加载igraph包,再构造你的示例数据:
# 安装igraph包(首次运行需执行) install.packages("igraph") library(igraph) # 创建目标数据框 shop_manager <- data.frame( Shop = c("S1", "S1", "S2", "S2", "S3", "S4"), Manager = c(34, 12, 11, 34, 34, 50) )
步骤2:生成店铺间的关联边
按经理分组,找出每组内共享经理的店铺对,最后去重避免重复边:
# 按经理拆分店铺列表,只保留有多个店铺共享的经理组 manager_groups <- split(shop_manager$Shop, shop_manager$Manager) valid_groups <- manager_groups[sapply(manager_groups, length) >= 2] # 生成每组内店铺的两两组合,转成边数据框并去重 edges <- do.call(rbind, lapply(valid_groups, function(x) t(combn(x, 2)))) edges <- unique(data.frame(V1 = edges[,1], V2 = edges[,2], stringsAsFactors = FALSE))
步骤3:计算节点大小(按店铺拥有的经理数)
统计每个店铺的经理数量,作为节点大小的依据:
# 统计每个店铺的经理数量 node_sizes <- as.data.frame(table(shop_manager$Shop), stringsAsFactors = FALSE) colnames(node_sizes) <- c("Shop", "size")
步骤4:构建并绘制网络图
用igraph创建无向图,设置节点大小、样式等参数完成绘图:
# 从边和节点数据创建图对象 g <- graph_from_data_frame(d = edges, vertices = node_sizes, directed = FALSE) # 绘制网络图,可按需调整参数 plot(g, vertex.size = V(g)$size * 10, # 放大节点大小,系数可自行修改 vertex.label.cex = 1.2, # 标签字号 edge.color = "gray", # 边的颜色 vertex.color = "#4287f5", # 节点填充色 main = "店铺共享经理关联网络图")
最终效果:
- S1、S2、S3因共享经理34互相连接,S4为孤立节点
- 节点大小对应店铺的经理数量:S1、S2有2个经理,节点最大;S3、S4各1个经理,节点较小
内容的提问来源于stack exchange,提问作者k34l
相关产品推荐
相关产品推荐

