R中的NetworkD3 Sankey图:如何计算每个链接的值?

时间:2017-10-23 00:33:35

标签: javascript r d3.js dplyr networkd3

我试图按照d3Network的R端口示例创建一个详细描述的Sankey Plot(如此处所述:https://christophergandrud.github.io/networkD3/)。我加载以下示例“能量”数据集:

    # Load energy projection data

    URL <- paste0("https://cdn.rawgit.com/christophergandrud/networkD3/",
    "master/JSONdata/energy.json")

    Energy <- jsonlite::fromJSON(URL)

导入“Energy”数据集会生成两个新的data.frames;节点和链接。查看链接数据可以看到以下格式:

    head(Energy$links)
      source target   value
  1        0      1 124.729
  2        1      2   0.597
  3        1      3  26.862
  4        1      4 280.322
  5        1      5  81.144
  6        6      2  35.000

“source”列表示原点节点,“target”列表示目标节点,“value”列表示每个链接的值。

即使这在概念上相当简单,但我在使用与Energy$links data.frame相同的格式获取我正在使用的数据集时遇到了巨大的困难。我已经能够以下列格式获取我的数据,但我正在绘制一个关于如何进一步改进它的完整空白:

   head(sampleSankeyData, n = 10L)
    clientID                node1
      <int>                <chr>
 1     23969 1 Community Services
 2     39199      1 Youth Justice
 3     23595      1 Mental Health
 4     15867 1 Community Services
 5     18295            3 Housing
 6     18295            2 Housing
 7     18295 1 Community Services
 8     18295            4 Housing
 9     15253            1 Housing
 10    27839 1 Community Services 

我希望能够为每个链接聚合唯一客户端的数量。例如,在上述数据子集中,由于客户端18295,“1社区服务”到“2住房”的链接应该具有值1(如“2住房”到“3住房”的链接那样) “以及”3住房“到”4住房“)。因此,我希望能够在Sankey图示例中以与Energy$links相同的格式获取数据。

1 个答案:

答案 0 :(得分:0)

试试这个:

networkD3

并将其与links <- df3 %>% dplyr::ungroup() %>% # ungroup just to be safe dplyr::filter(!is.na(source) & !is.na(target)) # remove lines without a link # build the nodes data frame based on nodes in your links data frame nodeFactors <- factor(sort(unique(c(links$source, links$target)))) nodes <- data.frame(name = nodeFactors) # convert the source and target values to the index of the matching node in the # nodes data frame links$source <- match(links$source, levels(nodeFactors)) - 1 links$target <- match(links$target, levels(nodeFactors)) - 1 # plot library(networkD3) sankeyNetwork(Links = links, Nodes = nodes, Source = 'source', Target = 'target', Value = 'clients', NodeID = 'name') ...

一起使用
{{1}}