我目前正在分析有关人们喜欢的音乐流派的调查数据。我想建立一个网络来展示人们经常同时喜欢哪些类型。
我不确定格式化数据的最佳方法是什么。目前的形式是这样的:
Genre A Genre B Genre C
Person A 1 1 1
Person B 1 1 0
Person C 1 1 0
1 表示他们喜欢,0 表示他们不喜欢。我希望网络能够连接流派,并让边缘显示它们连接的频率。我认为 igraph 包可以工作,但我需要先将数据转换为边缘列表。
这里有一些用于设置表格的快速代码,以备您需要时使用:
read.table(text =
"GenreA GenreB GenreC
PersonA 1 1 1
PersonB 1 1 0
PersonC 1 1 0
", header = TRUE)
我不太确定从哪里开始。
使用
crossprod
转换为邻接矩阵来获取图形可能是最简单的:
library(igraph)
g <- as.matrix(df) |>
crossprod() |>
graph_from_adjacency_matrix(mode = 'undirected', diag = FALSE)
现在
g
是你的实际图表(网络对象)
plot(g)
如果你想将它作为边缘列表,你可以这样做:
as_edgelist(g)
#> [,1] [,2]
#> [1,] "GenreA" "GenreB"
#> [2,] "GenreA" "GenreB"
#> [3,] "GenreA" "GenreB"
#> [4,] "GenreA" "GenreC"
#> [5,] "GenreB" "GenreC"
创建于 2023-08-18,使用 reprex v2.0.2