将分类属性向量转换为相似度矩阵

Transform categorical attribute vector into similarity matrix

我需要使用 R 将分类属性向量转换为 "same attribute matrix"。

例如,我有一个向量报告 N 个人的性别(男性 = 1,女性 = 0)。我需要将这个向量转换成一个名为 A 的 NxN 矩阵(行和列上都有人名),其中如果两个人(i 和 j)具有相同的性别,则每个单元格 Aij 的值为 1,否则为 0。

这是一个有 3 个人的例子,第一位男性,第二位女性,第三位男性,产生了这个向量:

c(1, 0, 1) 

我想把它转化成这个矩阵:

A = matrix( c(1, 0, 1, 0, 1, 0, 1, 0, 1), nrow=3, ncol=3, byrow = TRUE) 

就像 lmo 在评论中所说的那样,不可能知道数据集的结构,因此下面只是一个示例,供您了解如何完成。
先补个资料。

set.seed(3488)    # make the results reproducible
x <- LETTERS[1:5]
y <- sample(0:1, 5, TRUE)
df <- data.frame(x, y)

现在根据你的需要做成表格

A <- outer(df$y, df$y, function(a, b) as.integer(a == b))
dimnames(A) <- list(df$x, df$x)
A
#  A B C D E
#A 1 1 1 0 0
#B 1 1 1 0 0
#C 1 1 1 0 0
#D 0 0 0 1 1
#E 0 0 0 1 1