将关系对转换为矩阵
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))
我有一个这样的数据框。每行的 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))