Диаграмма Санки для переходов

Я пытаюсь воспроизвести код и выдать вопрос о переполнении стека ниже Sankey diagram in R

Добавление некоторых образцов данных

head(links) #Data.frame

Source   Target  Weight 
 Fb        Google  20 
 Fb         Fb      2
 BBC        Google 21
 Microsoft  BBC    16 

head(nodes) 
Fb
BBC
Google
Microsoft 

Код для построения потока перехода через санки

sankeyNetwork(Links = links, 
              Nodes = nodes, 
              Source = "Source",
              Target = "Target", 
              Value = "value", 
              fontSize = 12, 
              nodeWidth = 30)

В упомянутых выше сообщениях о переполнении стека упоминается, что источник и цель должны быть проиндексированы на 0. Однако, если я попробую использовать тот же синтаксис, я получу NA в моих Source и Target. Что могло быть причиной этой ошибки?


person EricA    schedule 05.09.2017    source источник


Ответы (2)


Вы можете преобразовать свои исходные и целевые переменные во фрейме данных ссылок в индекс узлов в фрейме данных ваших узлов, например, так ...

links <- read.table(header = T, text = "
Source   Target  Weight
Fb        Google  20
Fb         Fb      2
BBC        Google 21
Microsoft  BBC    16
")

nodes <- read.table(header = T, text = "
name
Fb
BBC
Google
Microsoft
")

# set the Source and Target values to the index of the node (zero-indexed) in
# the nodes data frame
links$Source <- match(links$Source, nodes$name) - 1
links$Target <- match(links$Target, nodes$name) - 1

print(links)
print(nodes)

# use the name of the column in the links data frame that contains the values
# for the value you pass to the Value parameter (e.g. "Weight" not "value")
library(networkD3)
sankeyNetwork(Links = links, Nodes = nodes, Source = "Source", 
              Target = "Target", Value = "Weight",
              fontSize = 12, nodeWidth = 30)
person CJ Yetman    schedule 06.09.2017

Этот код создал график внизу. См. Мои комментарии для объяснения изменений в вашем коде. И здесь есть замечательный ресурс: несколько методов с R для создания участков Sankey (река).

library(networkD3)  

# change to numeric index starting at 0.  I assigned Fb to zero, and so on
links <- data.frame(Source = c(0, 0, 1, 2),
                     Target = c(3, 0, 3, 1),
                     Weight = c(20, 2, 21, 16))

# a nodes dataframe (or dataframe element of a list, as in the help) is needed
nodes <- data.frame(name = c("Fb", "Google", "BBC", "MS"))

sankeyNetwork(Links = links, 
              Nodes = nodes, 
              Source = "Source",
              Target = "Target", 
              Value = "Weight",   # changed from "value"
              fontSize = 12, 
              nodeWidth = 30)   

введите здесь описание ссылки

person lawyeR    schedule 05.09.2017