r语言 - 来自多个列的网络图



>我有一个表名列表,并希望能够在R中可视化它们之间的关系。所以从表 A 到

例如,如果我有一个数据帧:

 Col 1      Col 2     Col 3    Col 4
 Table A | Table B | Table C | 
 Table Z | Table A | Table C | Table Y
 Table K | Table L | Table M | Table B
 Table J | Table H | 

我以前使用igraph进行过映射,但我有不同的数据结构。只有两列:from & to。如果我有多个这样的列,有没有办法绘制图表?我找不到很多这方面的资源。

我希望创建一张地图。这将有从表 A 到表 B 和 C 的行,然后还有另一行从表 A 到表 z 和表 C 和表 Y,因为它们是相关的,等等。

http://kateto.net/networks-r-igraph。i图中的网络是我试图模仿的

你的句子"所以从表A到的一条线">突然结束,但如果它像表B和表C一样结束"。不幸的是,graph_from_adj_list仅适用于数字列表,因此您只需将数据转换为两列数据框:

您需要进行一些数据清理。如果你的数据在数据框中,那么你需要使用tidyrgroup_bynest函数,然后使用lapply函数循环访问新的数据列,t将列转换为行:

library(igraph)
library(tidyverse)

al_tibble <- tibble(c1 = c('a', 'z', 'k', 'j'),
                    c2 = c('b', 'a', 'l', 'h'),
                    c3 = c('c', 'c', 'h', NA),
                    c4 = c(NA, 'y', 'b', NA))
el <- al %>% 
  group_by(c1) %>%
  nest() %>%
  mutate(data = lapply(data, t)) %>% 
  unnest() %>%
  filter(!is.na(data))
g <- graph_from_data_frame(el)

如果数据在列表中进行组织,则需要循环访问每个列表项并从中创建数据框。然后,您需要使用 bind_rows 绑定每个创建的数据框

al_list <- list('a' = c('b', 'c'),
                "z" = c('a', 'c', 'y'),
                "k" = c('l', 'h', 'b'),
                "j" = c('h'))
el2 <- lapply(names(al_list), function(x){
  tibble(from = x,
         to = al_list[[x]])
}) %>%
  bind_rows
g2 <- graph_from_data_frame(el2)

我在另一篇文章的帮助下弄清楚了这一点:

plot(graph.data.frame(rbindlist(lapply(seq(ncol(test_a2)-1), function(i) test_a2[i:(i+1)]))))

test_a2只是一个具有多列的数据帧

在这里,它将绘制前两列,然后移动到第二列和第三列,依此类推。

我希望这对某人有所帮助!

相关内容

  • 没有找到相关文章