足球运动员社交网络聚类:树状图创建报错求助
解决足球运动员朋友圈相似度聚类的树状图错误
错误信息:FUN(X[[i]], ...) 中出错:as.sociomatrix.sna 的输入必须是邻接矩阵/数组、网络对象或列表。
你的代码问题在于:graph_from_edgelist生成的是igraph图对象,但cor()函数无法直接处理这类对象——它需要矩阵格式的好友关系数据,才能计算不同运动员朋友圈的相关性。
修正后的代码及说明
# 读取数据集 footballplayers <- read.csv("footballplayer.csv", header = TRUE) # 根据边列表生成图对象(好友关系建议设为无向,若确实是单向关注保留directed=TRUE) footballplayers_e <- graph_from_edgelist(as.matrix(footballplayers), directed = FALSE) # 将图对象转为邻接矩阵:行/列对应运动员,单元格1=存在好友关系,0=无 adj_matrix <- as_adjacency_matrix(footballplayers_e, type = "both", names = TRUE, sparse = FALSE) # 计算运动员朋友圈的相关性:转置矩阵后,每行代表一个运动员的好友列表,cor计算列表间的相关性 # 用1减去相关系数得到距离值,用于聚类 similarities <- as.dist(1 - cor(t(adj_matrix)), upper = TRUE) # 层次聚类并绘制树状图 footballplayersdend <- hclust(similarities) plot(footballplayersdend)
关键修正点
- 转成邻接矩阵:用
as_adjacency_matrix()把igraph对象转换成数值矩阵,这是计算相关性的前提 - 转置矩阵:默认邻接矩阵的行是"SELF"列的运动员,列是"OTHER"列的好友;转置后每行对应一个运动员的所有好友,这样
cor()才能正确计算不同运动员朋友圈的相似度 - 可选调整:如果你的数据是单向关注(不是双向好友),可以把
as_adjacency_matrix的type参数改成"out",只保留每个运动员主动关注的好友列表
内容的提问来源于stack exchange,提问作者user20825888
相关产品推荐
相关产品推荐

