Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何制作邻接表_R_Igraph_Adjacency Matrix_Chord Diagram - Fatal编程技术网

R 如何制作邻接表

R 如何制作邻接表,r,igraph,adjacency-matrix,chord-diagram,R,Igraph,Adjacency Matrix,Chord Diagram,我有类似的数据 mydf <- data.frame(p1=c('a','a','a','b','b','b','c','c','d'), p2=c('b','c','d','c','d','e','d','e','e'), p3=c('a','a','c','c','d','d','d','a','a'), p4=c('a','a','b','c','c','e','d','

我有类似的数据

mydf <- data.frame(p1=c('a','a','a','b','b','b','c','c','d'),
                   p2=c('b','c','d','c','d','e','d','e','e'),
                   p3=c('a','a','c','c','d','d','d','a','a'),
                   p4=c('a','a','b','c','c','e','d','a','b'),
                   p5=c('a','b','c','d','e','b','b','c','c'),
                   source=c('a','b','c','d','e','e','a','b','d'))
我想创建两个邻接矩阵,作为源列到rest列之间的连接数。例如:

   a  b  c  d  e  
a  4  2
b  5  1
c  1  1
d  1  2
e  0  3
有什么方法可以轻松地做到这一点吗。如果您对base R有任何帮助,我们将不胜感激。我们可以使用unlist和table:

另一种方法是获取长格式的数据,根据源进行计数,然后再次获取宽格式的数据

library(dplyr)
library(tidyr)

mydf %>%
  pivot_longer(cols = -source) %>%
  count(source, value) %>%
  pivot_wider(names_from = value, values_from = n, values_fill = list(n = 0))

#  source     a     b     c     d     e
#  <fct>  <int> <int> <int> <int> <int>
#1 a          4     2     1     3     0
#2 b          5     1     3     0     1
#3 c          1     1     2     1     0
#4 d          1     2     4     2     1
#5 e          0     3     1     3     3

df[1:2]将为col1和col2生成一个固定的差异:行名和列名是a-f,但您的col1列不在输出中。但是如果没有set.seed,我真的不能确定。你能检查一下修改过的问题吗@Ronakshah对不起,有一个错误,我现在改正了。我从源代码到rest列进行计数。例如,在a到a中,第1行列中的a到a之间有四个单向连接—p1、p3、p4和p5,其余行中没有。在第二行a到b中,有五个单向连接行2、列p1、p3和p4,加上行8、列p3和p4。希望现在一切都清楚了@谢谢。我接受了你的回答@Ronakshah代码在示例数据中运行良好。当我在大数据中使用代码时,我没有得到邻接表。与示例不同,列名是数字而不是字符串。邻接矩阵的行和列应该相等。非常感谢您的帮助@ronak Shah请分享代表您实际数据的示例,以便更容易提供帮助。谢谢。这里有数据>上面说链接过期了。奇怪。请在此处查找数据[链接]“代码”NA表示没有数据
table(rep(mydf$source, ncol(mydf) - 1), unlist(mydf[-ncol(mydf)]))

#    a b c d e
#  a 4 2 1 3 0
#  b 5 1 3 0 1
#  c 1 1 2 1 0
#  d 1 2 4 2 1
#  e 0 3 1 3 3
library(dplyr)
library(tidyr)

mydf %>%
  pivot_longer(cols = -source) %>%
  count(source, value) %>%
  pivot_wider(names_from = value, values_from = n, values_fill = list(n = 0))

#  source     a     b     c     d     e
#  <fct>  <int> <int> <int> <int> <int>
#1 a          4     2     1     3     0
#2 b          5     1     3     0     1
#3 c          1     1     2     1     0
#4 d          1     2     4     2     1
#5 e          0     3     1     3     3