Создание графа дерева в R, который отображает частоту путей - PullRequest
0 голосов
/ 02 октября 2018

Я изо всех сил пытался озаглавить этот пост, но, надеюсь, пример и объяснение ниже помогут.Я хотел бы создать древовидный график, который показывает частоту различных «путей» в моих данных.У меня есть следующий фрейм данных:

zed = data.frame(
  node1 = c("A", "A", "A", "A", "A", "A", "A", "A"),
  node2 = c("A", "B", "A", "B", "A", "B", "A", "B"),
  node3 = c("B", "C", "D", "D", "C", "D", "C", "C"),
  node4 = c("C", "C", "D", "D", "D", "D", "D", "C"),
  stringsAsFactors = FALSE
)

, и я хотел бы создать график в R, который будет выглядеть примерно так (очень грубый эскиз, сделанный быстро в Excel):

enter image description here

По сути, каждая строка в кадре данных является путем.Все пути начинаются с «A», поэтому «A» является единственным верхним узлом, а затем (в этом примере) они переходят к B, C и D. Некоторые пути встречаются чаще, чем другие (A -> B ->C -> C появляется дважды, тогда как некоторые другие пути появляются один раз), и я думаю, я бы хотел, чтобы это отразилось на размере узлов.

Я не уверен, должен ли я переформатировать мои данные для этого, а также какая библиотека R-графиков лучше всего подходит для этого.Рад добавить больше контекста - любая помощь приветствуется !!

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Совет, который я собираюсь дать, относится к пакету igraph:

Чтобы создать график из фрейма данных, ваши данные должны быть в длинном формате, где первые два столбца представляют ссылки узловприходят (первый столбец) и куда идут ссылки (второй столбец).Кроме того, имена узлов должны быть уникальными, поэтому ребро от «A» до «A» - это просто узел, указывающий на себя.Ваши данные имеют разные узлы с именем «A».Используя ваши данные, вам нужно будет сделать что-то вроде этого:

zed$node1 <- paste0(zed$node1, '_1')
zed$node2 <- paste0(zed$node2, '_2')
zed$node3 <- paste0(zed$node3, '_3_', 1:nrow(zed))
zed$node4 <- paste0(zed$node4, '_4_', 1:nrow(zed))

edgelist <- rbind(
  as.matrix(zed[c('node1', 'node2')]),
  as.matrix(zed[c('node2', 'node3')]),
  as.matrix(zed[c('node3', 'node4')])
)

Что даст вам:

edgelist

Для построения графикаэто вам нужно сделать что-то вроде этого:

library(igraph)
g <- graph_from_data_frame(edgelist)
plot(g, layout = layout_as_tree(g))

tree layout

Если вы хотите узнать больше, тогда я настоятельно рекомендую взглянуть на КатюУчебные пособия Огняновой: http://kateto.net/tutorials/

0 голосов
/ 02 октября 2018

Я просто собираюсь изучить пакеты iGraph и data.tree для этого и посмотреть, какой пакет лучше подойдет для создания моего графика.

Постараюсь не забыть опубликовать здесь обновление, если яЯ успешен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...