r - 聚类向量在 R 中得到一个零一矩阵

标签 r matrix vector cluster-analysis

假设我有一个由任何聚类方法生成的聚类向量,如虹膜数据上的以下内容:

data(iris)
kmeans_res <- kmeans(x = iris[,c(1:4)], centers = 3)
kmeans_res$cluster

有没有一种有效的方法来根据这个向量创建一个包含零和一的矩阵?

该矩阵的行和列是数据集 1 到 n 的观测值。并且条目应该是一个,例如观测值 5 和 8 属于同一簇,否则为零。

这个问题可以用循环来解决,但这看起来不太优雅。你能想到其他解决方案吗?

最佳答案

您可以使用outer

M <- +(outer(v, v, `==`))
M[50:60, 50:60]
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
#  [1,]    1    0    0    0    0    0    0    0    0     0     0
#  [2,]    0    1    1    0    1    1    1    1    1     1     1
#  [3,]    0    1    1    0    1    1    1    1    1     1     1
#  [4,]    0    0    0    1    0    0    0    0    0     0     0
#  [5,]    0    1    1    0    1    1    1    1    1     1     1
#  [6,]    0    1    1    0    1    1    1    1    1     1     1
#  [7,]    0    1    1    0    1    1    1    1    1     1     1
#  [8,]    0    1    1    0    1    1    1    1    1     1     1
#  [9,]    0    1    1    0    1    1    1    1    1     1     1
# [10,]    0    1    1    0    1    1    1    1    1     1     1
# [11,]    0    1    1    0    1    1    1    1    1     1     1

v[50:60]
# [1] 1 2 2 3 2 2 2 2 2 2 2

数据:

v <- kmeans_res$cluster

关于r - 聚类向量在 R 中得到一个零一矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62089228/

相关文章:

c++ - 如何计算 OpenCV 中矩阵的直方图?

使用三重指针创建矩阵会导致段错误

删除每个元素上的按钮,动态添加到 Shiny 的 UI

r - 使用 ggplot2 网格显示不良

r - 在 R 中按组有效地复制矩阵行

java - vector 上的 l2 标准化错误 [Java]

c++ - 声明继承的模板化对象并将它们推回 vector - 优雅的方式?

c++ - 从 Mat 到 vector<Vec3f> 和其他方式而不破坏图像

r - 用于工具包文档的 docker : `docker export` not including all layers?

r - 为什么我不能在 df_tbl 中改变这个字段?