определить data.frame как расстояние и выполнить иерархическую кластеризацию в R - PullRequest
0 голосов
/ 27 мая 2020
ggg <- data.frame(row.names=c("a","b","c","d","e"),var1=c("0","0","0","0","0"),var2=c("1","1","1","1","2"))

ggg_dist <- as.matrix(ggg) %>% as.dist(.)

In as.dist.default(.) : non-square matrix

class(ggg_dist)
[1] "dist"

ggg_dist
Warning message:
In df[row(df) > col(df)] <- x :
  number of items to replace is not a multiple of replacement length

 h_ggg <- hclust(ggg_dist,method="average")

Fehler in hclust(ggg_dist, method = "average") : 
  'D' must have length (N \choose 2).

Я хочу выполнить иерархическую кластеризацию с ggg. ggg_dist - это расстояние, подтвержденное с помощью class(), сделанного из ggg. Я хочу выполнить иерархическую кластеризацию с помощью ggg_dist, но это не работает. Это показывает ошибку выше. Как я могу это решить.

Я пробовал это Как преобразовать data.frame в матрицу расстояний для иерархической кластеризации? , но получаю ту же ошибку, когда я пытаюсь вызвать ggg_dist.

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Вы можете использовать функцию dist:

ggg_dist <- dist(ggg, method = "euclidian")

Результат:

ggg_dist
  a b c d
b 0      
c 0 0    
d 0 0 0  
e 1 1 1 1
0 голосов
/ 27 мая 2020

as.dist() требует квадратной матрицы или data.frame. Ваш исходный объект ggg имеет 5 строк, но всего 2 столбца.

Что-то вроде следующего будет работать.

ggg <- data.frame(row.names = c("a", "b"), 
                  var1 = c("0", "0"), 
                  var2 = c("1", "1"))

ggg_dist <- as.dist(ggg)

h_ggg <- hclust(ggg_dist, method="average")
h_ggg
#> 
#> Call:
#> hclust(d = ggg_dist, method = "average")
#> 
#> Cluster method   : average 
#> Number of objects: 2

Создано 27 мая 2020 года пакетом REPEX (v0.3.0)

...