首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作邻接表

如何制作邻接表
EN

Stack Overflow用户
提问于 2020-01-16 08:13:58
回答 1查看 296关注 0票数 0

我有类似的数据

代码语言:javascript
复制
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'))

这意味着:

代码语言:javascript
复制
   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

我想要创建两个邻接矩阵as,源到rest columns.For之间的连接数示例:

代码语言:javascript
复制
   a  b  c  d  e  
a  4  2
b  5  1
c  1  1
d  1  2
e  0  3

有什么办法能轻易做到吗。会很感激你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-05 12:59:30

在基本R中,我们可以使用unlisttable

代码语言:javascript
复制
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

另一种方法可以是以长格式获取数据,基于countsource数据,并再次以宽格式获取数据。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59765383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档