【问题标题】:Network Analysis - Manipulating data - Shiny网络分析 - 操纵数据 - Shiny
【发布时间】:2018-06-11 18:41:23
【问题描述】:

我正在使用networkD3 包,我正在尝试进行一些网络分析

假设我有这些数据:

src <- c("Dizzy Gillespie","Louis Armstrong","Max Roach","Charlie Parker","Charlie Parker")
target <- c("Chet Baker","Chet Baker","Peter Erskine","John Coltrane","Wayne Shorter")
group <- c("Trumpet","Trumpet","Drums","Saxophone","Saxophone")

networkData <- data.frame(src, target,group)

我已阅读此文档 https://christophergandrud.github.io/networkD3/,但他们不会告诉他们如何操作 MisLinksMisNodes 上的数据以创建其他列...我如何操作我的数据框以便它可以工作在 forceNetwork() 函数上,就像在 Les miserables 数据上的函数一样?

【问题讨论】:

    标签: r shiny htmlwidgets networkd3


    【解决方案1】:

    你可以像这样直接使用simpleNetworksimpleNetwork(networkData)

    如果你想使用forceNetwork,帮助页面说Nodes数据框是“包含节点ID和节点属性的数据框。如果没有指定ID,那么节点必须在与 Links 数据框中的 Source 变量列的顺序相同。目前只允许一个分组变量。”,所以它应该看起来像这样......

    #             names     group
    # 1 Dizzy Gillespie   Trumpet
    # 2 Louis Armstrong   Trumpet
    # 3       Max Roach     Drums
    # 4  Charlie Parker Saxophone
    # 5      Chet Baker   Trumpet
    # 6   Peter Erskine     Drums
    # 7   John Coltrane Saxophone
    # 8   Wayne Shorter Saxophone
    

    您可以像这样从networkData 数据框创建...

    col_names <- c("name", "group")
    nodes <- rbind(setNames(networkData[c(1, 3)], col_names), 
                   setNames(networkData[c(2, 3)], col_names))
    nodes <- unique(nodes)
    

    帮助页面说Links数据框是“一个数据框对象,其中包含节点之间的链接。它应该包括每个链接的源和目标。这些应该从0开始编号。一个可选的值变量可以包含以指定节点彼此之间的距离。”,所以它应该看起来像这样......

    #   src target
    # 1   0      4
    # 2   1      4
    # 3   2      5
    # 4   3      6
    # 5   3      7
    

    然后您可以使用networkData 数据框和上面创建的nodes 数据框创建它...

    networkData$src <- match(networkData$src, nodes$name) - 1
    networkData$target <- match(networkData$target, nodes$name) - 1
    networkData$group <- NULL
    

    然后您将它们传递给forceNetwork 并告诉它您的数据框中列的名称,如下所示...

    forceNetwork(Links = networkData, Nodes = nodes, Source = "src", 
                 Target = "target", NodeID = "name", Group = "group")
    

    【讨论】:

    • 非常感谢!有没有办法给圆圈加一些“重量”?例如,如果某人有更多链接,则圆圈会更大......
    • 查看帮助文件...所有这些信息都在其中。 nodes$node_size &lt;- 1:nrow(nodes) * 10; forceNetwork(Links = networkData, Nodes = nodes, Source = "src", Target = "target", NodeID = "name", Group = "group", Nodesize = "node_size")
    • 仅供参考...您可以通过在 R 控制台中键入此内容来阅读帮助文件 ?forceNetwork
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多