如何将数据转换为边列表

问题描述 投票:0回答:1

我目前正在分析有关人们喜欢的音乐流派的调查数据。我想建立一个网络来展示人们经常同时喜欢哪些类型。

我不确定格式化数据的最佳方法是什么。目前的形式是这样的:

         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)

我不太确定从哪里开始。

r igraph network-analysis
1个回答
0
投票

使用

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

© www.soinside.com 2019 - 2024. All rights reserved.