【问题标题】:Transform categorical attribute vector into similarity matrix将分类属性向量转换为相似度矩阵
【发布时间】:2017-10-25 18:30:12
【问题描述】:

我需要使用 R 将分类属性向量转换为“相同属性矩阵”。

例如,我有一个向量报告 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) 

【问题讨论】:

    标签: r matrix vector similarity sna


    【解决方案1】:

    就像 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
    

    【讨论】:

    • 一个 alt..tcrossprod(table(df))
    • 略短,但更难阅读/解释:+outer(tmp, tmp, "==").
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2018-11-05
    • 1970-01-01
    • 2021-04-29
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多