簡體   English   中英

在 R 中帶網絡 package 的桑基圖

[英]Sankey Diagram with Network package in R

我正在嘗試按照 R Graph Gallery 的說明創建一個簡單的桑基圖: https://www.r-graph-gallery.com/322-custom-colours-in-sankey-diagram.ZFC339FDC70D22C69D25E88388 我有一個數據集,每個 ID 有兩個 obv。 對於每個時期,我都知道某人是否貧窮。 數據集如下所示:

ID   YEAR   POVERTY
1    2018      0
1    2019      1
2    2018      1
2    2019      1
3    2018      0
3    2019      1
4    2018      0
4    2019      0
5    2018      0
5    2018      0

我想我需要將其轉換為源-目標-值表,但我不明白“值”是什么意思。 有人會向我解釋嗎? 我怎么能繼續前進呢?

非常感謝您的幫助:)

我使用了它提供的代碼:

library("dplyr", warn.conflicts = FALSE)
library("networkD3")

diagram <- SUBSET05%>% 
  dplyr::mutate(Poverty = dplyr::if_else(Poverty==1, "poor", "not poor")) %>% 
  dplyr::transmute(id_nmbr, yr_interview, Poverty = paste(Poverty, yr_interview, sep = "_"))

links <- diagram %>%
  tidyr::pivot_wider(names_from = yr_interview, values_from = Poverty) %>% 
  dplyr::rename(source = `2018`, target = `2019`)

nodes <- data.frame(name = unique(c(links$source, links$target))) %>% 
  tidyr::separate(name, into = c("group", "year"), sep = "_", remove = FALSE)

links$id_nmbrsource <- match(links$source, nodes$name)-1 
links$id_nmbrtarget <- match(links$target, nodes$name)-1
links$value <- 10

sn <- sankeyNetwork(Links = links,
                    Nodes = nodes,
                    NodeID = "name",
                    Source = "id_nmbrsource",
                    Target = "id_nmbrtarget",
                    NodeGroup = "group",
                    Value = "value")
sn 

我得到以下圖像:

在此處輸入圖像描述

我的數據集有 34034 個觀測值,每年 17017 個。 因此,我是否必須更改值列? 什么可能導致丑陋的形象?

我不確定我是否真的了解您希望您的 output 看起來如何。

無論哪種方式,我都不認為“價值”對你來說真的很重要。 每個連接都具有相同的重要性,因此您可以將其設置為任意值。

如果只是為了顯示有多少人從貧困轉向非貧困,那么出發點應該是您實際上有四個群體:在兩個時間段內的“貧困”和“非貧困”。

結果將是這樣的:

library("dplyr", warn.conflicts = FALSE)
library("networkD3")


df <- tibble::tribble(
  ~ID, ~YEAR, ~POVERTY,
  "1", 2018, 0,
  "1", 2019, 1,
  "2", 2018, 1,
  "2", 2019, 1,
  "3", 2018, 0,
  "3", 2019, 1,
  "4", 2018, 0,
  "4", 2019, 0,
  "5", 2018, 0,
  "5", 2019, 0
) %>% 
  dplyr::mutate(POVERTY = dplyr::if_else(POVERTY==0, "poor", "not poor")) %>% 
  dplyr::transmute(ID, YEAR, POVERTY = paste(POVERTY, YEAR, sep = "_")) 


links <- df %>% 
  tidyr::pivot_wider(names_from = YEAR, values_from = POVERTY) %>% 
  dplyr::rename(source = `2018`, target = `2019`) 

nodes <- data.frame(name = unique(c(links$source, links$target))) %>% 
  tidyr::separate(name, into = c("group", "year"), sep = "_", remove = FALSE)


links$IDsource <- match(links$source, nodes$name)-1 
links$IDtarget <- match(links$target, nodes$name)-1
links$value <- 10


sn <- sankeyNetwork(Links = links,
                    Nodes = nodes,
                    NodeID = "name",
                    Source = "IDsource",
                    Target = "IDtarget",
                    NodeGroup = "group",
                    Value = "value") 

sn

桑基

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM