从数据帧创建边缘列表

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

我正在尝试从包含匹配事件的数据帧创建边缘列表。数据帧的每一行都是对敌方团队的一名玩家的杀戮。 Playerid栏表示杀死的人。助攻指示哪个人协助了这次特殊的杀戮。 ID 1-5属于团队1,ID 6属于团队2。第一列包含rowID。

      ASSIST1 ASSIST2 ASSIST2 ASSIST2 PLAYERID 
50       6       8      NA      NA        9
51       7      10       9       8        6
52      10       9      NA      NA        6
53       7       9       8      NA        6
54       6       7       8      NA        9
55       2      NA      NA      NA        1
56       8      NA      NA      NA        9
57       6       7       8      NA        9
58       7      10       8      NA        9
59      NA      NA      NA      NA        4
60       4       3      NA      NA        1
61      10       9       8      NA        7
62       9       8      NA      NA        6
63       7       9       8      NA       10
64       3       2      NA      NA        5
65       7      NA      NA      NA        9
66       7      NA      NA      NA        9

我需要的是将其转换为边缘列表,稍后再将其转换为有向网络,因此我可以计算入度,出度等。而且,我需要知道每个参与者之间有多少互动,但这应该可以在有价值的定向网络中看到。但是,将其转换为边缘列表时遇到问题。我尝试在线寻找解决方案,但找不到转换为边缘列表的相似数据集。如果有人可以帮助我,我将不胜感激。

r dataframe networking igraph edge-list
1个回答
0
投票

我认为简单的从宽到长格式转换,再加上对NA的过滤就可以解决问题。

z <- "      ASSIST1 ASSIST2 ASSIST2 ASSIST2 PLAYERID 
50       6       8      NA      NA        9
51       7      10       9       8        6
52      10       9      NA      NA        6
53       7       9       8      NA        6
54       6       7       8      NA        9
55       2      NA      NA      NA        1
56       8      NA      NA      NA        9
57       6       7       8      NA        9
58       7      10       8      NA        9
59      NA      NA      NA      NA        4
60       4       3      NA      NA        1
61      10       9       8      NA        7
62       9       8      NA      NA        6
63       7       9       8      NA       10
64       3       2      NA      NA        5
65       7      NA      NA      NA        9
66       7      NA      NA      NA        9"
dat <- read.table(text = z)
rownames(dat) <- NULL

elist <- reshape2::melt(dat, id.vars = "PLAYERID")
elist <- elist[!is.na(elist[, 3]), c(1, 3)]
elist <- as.matrix(elist)

library(igraph)
g <- graph_from_edgelist(elist)
plot(g)

enter image description here

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