Как сделать несколько Sankey googleVis из data.frame?

Цель

Я стремлюсь сделать несколько Sankey в R, используя пакет googleVis. Вывод должен выглядеть примерно так:

введите описание изображения здесь

Данные

Я создал некоторые фиктивные данные в R:

set.seed(1)

source <- sample(c("North","South","East","West"),100,replace=T)
mid <- sample(c("North ","South ","East ","West "),100,replace=T)
destination <- sample(c("North","South","East","West"),100,replace=T) # N.B. It is important to have a space after the second set of destinations to avoid a cycle
dummy <- rep(1,100) # For aggregation

dat <- data.frame(source,mid,destination,dummy)
aggdat <- aggregate(dummy~source+mid+destination,dat,sum)

Что я пробовал до сих пор

Я могу построить Sankey с двумя переменными, если у меня есть только источник и пункт назначения, но не средняя точка:

aggdat <- aggregate(dummy~source+destination,dat,sum)

library(googleVis)

p <- gvisSankey(aggdat,from="source",to="destination",weight="dummy")
plot(p)

Код производит это:

введите описание изображения здесь

Вопрос

Как изменить

p <- gvisSankey(aggdat,from="source",to="destination",weight="dummy")

принять и переменную mid?


person Community    schedule 04.08.2017    source источник


Ответы (1)


Функция gvisSankey принимает средние уровни напрямую. Эти уровни должны быть закодированы в базовых данных.

 source <- sample(c("NorthSrc", "SouthSrc", "EastSrc", "WestSrc"), 100, replace=T)
 mid <- sample(c("NorthMid", "SouthMid", "EastMid", "WestMid"), 100, replace=T)
 destination <- sample(c("NorthDes", "SouthDes", "EastDes", "WestDes"), 100, replace=T) 
 dummy <- rep(1,100) # For aggregation

Теперь мы изменим исходные данные:

 library(dplyr)

 datSM <- dat %>%
  group_by(source, mid) %>%
  summarise(toMid = sum(dummy) ) %>%
  ungroup()

Фрейм данных datSM суммирует количество единиц от источника до середины.

  datMD <- dat %>%
   group_by(mid, destination) %>%
   summarise(toDes = sum(dummy) ) %>%
   ungroup()

Фрейм данных datMD суммирует количество единиц от Mid до Destination. Этот фрейм данных будет добавлен к окончательному фрейму данных. Фрейм данных должен быть ungroup и иметь такой же colnames.

  colnames(datSM) <- colnames(datMD) <- c("From", "To", "Dummy")

Поскольку datMD добавляется последним, gvisSankey автоматически распознает средний шаг.

  datVis <- rbind(datSM, datMD)

  p <- gvisSankey(datVis, from="From", to="To", weight="dummy")
  plot(p)

Вот сюжет: Многоуровневый Санки

person Lstat    schedule 08.08.2017