假设我有一个由任何聚类方法生成的聚类向量,如虹膜数据上的以下内容:
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/