将关系对转换为矩阵

Transform relationship pairs into a matrix

我有一个这样的数据框。每行的 id 是唯一的, type 定义了 id.

的组
id  type
a   a1
b   a1
c   a2
d   a3
e   a4
f   a4

我想制作一个如下所示的矩阵。如果两个 id 属于同一个 type,则该值为 1,否则为 0.

    a   b   c   d   e   f
a   1   1   0   0   0   0
b   1   1   0   0   0   0
c   0   0   1   0   0   0
d   0   0   0   1   0   0
e   0   0   0   0   1   1
f   0   0   0   0   1   1

数据框很大(超过 7 万行),我不知道如何在 R 中有效地做到这一点。任何建议将不胜感激。

这是一个基本的 R 解决方案,我认为您可以使用以下代码

M <- crossprod(t(table(df)))

M <- crossprod(table(rev(df)))

这样

> M
   id
id  a b c d e f
  a 1 1 0 0 0 0
  b 1 1 0 0 0 0
  c 0 0 1 0 0 0
  d 0 0 0 1 0 0
  e 0 0 0 0 1 1
  f 0 0 0 0 1 1

数据

df <- structure(list(id = c("a", "b", "c", "d", "e", "f"), type = c("a1", 
"a1", "a2", "a3", "a4", "a4")), class = "data.frame", row.names = c(NA, 
-6L))