我正在尝试从包含匹配事件的数据帧创建边缘列表。数据帧的每一行都是对敌方团队的一名玩家的杀戮。 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
我需要的是将其转换为边缘列表,稍后再将其转换为有向网络,因此我可以计算入度,出度等。而且,我需要知道每个参与者之间有多少互动,但这应该可以在有价值的定向网络中看到。但是,将其转换为边缘列表时遇到问题。我尝试在线寻找解决方案,但找不到转换为边缘列表的相似数据集。如果有人可以帮助我,我将不胜感激。
我认为简单的从宽到长格式转换,再加上对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)