Вектор кластера получает матрицу нуля или единицы в R - PullRequest
2 голосов
/ 29 мая 2020

Допустим, у меня есть вектор кластера, сгенерированный любым методом кластеризации, например, следующий для данных радужной оболочки:

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

Есть ли эффективный способ создать матрицу с нулями и единицами на основе этого вектора ?

Строки и столбцы этой матрицы - это наблюдения из набора данных от 1 до n. И записи должны быть равны единице, если, например, наблюдения 5 и 8 принадлежат одному кластеру, и нулю в противном случае.

Проблема может быть решена с помощью al oop, но это не кажется очень элегантным. Вы можете придумать другое решение?

1 Ответ

3 голосов
/ 29 мая 2020

Вы можете использовать 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
...