【问题标题】:How to make an adjacency table如何制作邻接表
【发布时间】:2020-05-03 01:04:21
【问题描述】:

我有类似的数据

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'))

这给出了:

   p1 p2 p3 p4 p5 source
1  a  b  a  a  a      a
2  a  c  a  a  b      b
3  a  d  c  b  c      c
4  b  c  c  c  d      d
5  b  d  d  c  e      e
6  b  e  d  e  b      e
7  c  d  d  d  b      a
8  c  e  a  a  c      b
9  d  e  a  b  c      d

我想创建两个邻接矩阵,源到其余列之间的连接数。例如:

   a  b  c  d  e  
a  4  2
b  5  1
c  1  1
d  1  2
e  0  3

有什么方法可以轻松完成。希望有任何帮助

【问题讨论】:

  • do.call(table, df[1:2]) 将为col1col2 生成它,但有一个可修复的区别:行名和列名是a-f,但您的col1 列不在输出中。 (但如果没有set.seed,我真的无法确定。)
  • 你能检查修改后的问题@RonakShah
  • 对不起,有一个错误,我现在更正了。我从源数到其余列。例如,在“a”到“a”中,第 1 行(列 -p1、p3、p4 和 p5)中的 a 到 a 之间有四个单向连接,其余行中没有。第二,“a”到“b”,有五个单向连接(第 2 行,p1 列,p3 和 p4,加上第 8 行,p3 和 p4 列)。希望现在很清楚。 @RonakShah
  • 谢谢。我接受了你的回答。 @RonakShah

标签: r igraph adjacency-matrix chord-diagram


【解决方案1】:

在base R中,我们可以使用unlisttable

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

另一种方法是获取长格式数据,count 基于source,然后再次获取宽格式数据。

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

【讨论】:

  • 代码在示例数据中运行良好。当我使用大数据中的代码时,我没有得到邻接表。与示例不同,列名是数字(不是字符串)。邻接矩阵应该有相等的行和列。非常感谢您的帮助@ronak-shah
  • 请分享代表您的实际数据的示例,以便更容易提供帮助。
  • 它说“链接已过期”。
  • 奇怪。请在此处查找数据 [链接] (wetransfer.com/downloads/…) 'code' NA 表示没有数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 2012-07-17
相关资源
最近更新 更多