【问题标题】:Creating an edgelist from a data frame从数据框创建边缘列表
【发布时间】:2020-07-20 20:09:14
【问题描述】:

我正在尝试从包含匹配事件的数据框中创建一个边缘列表。数据框的每一行都是对敌方玩家的击杀。 Playerid 列表示被杀的人。 Assists 指示在此特定杀戮中协助的人。 ID 1-5 属于团队 1,6-10 属于团队 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】:

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

    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)
    

    【讨论】:

    • 字符向量是您发布的数据,用于将其导入我的 R 会话。我已经包含了这一点,因此您可以判断我是否在数据导入方面犯了错误。您可以将代码中的dat 变量替换为您发布的数据。对困惑感到抱歉。为了将来参考,您还可以使用dput(my_example_data) 并发布结果,以便其他人可以重复使用相同的数据。
    • 您好,感谢您的回答。您能否详细说明字符向量的结构?如果我拿这个匹配并且我使用`babip1
    • 抱歉不清楚。为了避免混淆,我添加了数据导入位。
    • 哦,好吧,你就这样复制粘贴了。我没有考虑。我会尝试将数据转换成这样的格式。非常感谢您的帮助。
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2021-06-27
    相关资源
    最近更新 更多