如何从hclust结果中获取标签

时间:2017-04-26 15:41:10

标签: r

假设我有一个像这样的数据集

dt<-data.frame(id=1:4,X=sample(4),Y=sample(4))

然后我尝试使用以下代码进行分层聚类

dis<-dist(dt[,-1])
clusters <- hclust(dis)
plot(clusters)

并且效果很好

enter image description here

关键是我要求

clusters$labels

它给了我NULL,同时我希望看到的个人标签

1, 4, 2, 3

让它们按照在剧情中添加的顺序非常重要

3 个答案:

答案 0 :(得分:1)

如果您没有分配标签,请使用cluster$order而不是标签。

事实上,您可以使用名为summary

的函数查看所有内容
clusters <- hclust(dis)
plot(clusters)
summary(clusters)
clusters$order

你可以与我收到的情节进行比较,它与你的情况差别很小

我的结果:

> clusters$order
[1] 4 1 2 3

摘要命令的内容:

> summary(clusters)
            Length Class  Mode     
merge       6      -none- numeric  
height      3      -none- numeric  
order       4      -none- numeric  
labels      0      -none- NULL     
method      1      -none- character
call        2      -none- call     
dist.method 1      -none- character

您可以观察到,因为标签有空值,因此您没有获得标签。要接收标签,您需要先使用clusters$labels <- c("A","B","C","D")指定标签,或者您可以使用rownames进行分配,一旦分配了标签,您将无法再看到能够看到名称/标签的数字。

在我的情况下,我没有指定任何名称,因此接收了数字。

您也可以将标签放在绘图功能中。

来自文档?hclust

  

标签
  标签字符传染媒介树的叶子的。通过   默认使用原始数据的行名或行号。如果   labels = FALSE根本没有标签。

enter image description here

答案 1 :(得分:0)

请确保使用rownames(...)确保您的数据有标签

> rownames(dt) <- dt$id
> dt
id X Y
1  1 2 1
2  2 4 3
3  3 1 2
4  4 3 4
> dis<-dist(dt[,-1])
> clusters <- hclust(dis)
> str(clusters)
List of 7
$ merge      : int [1:3, 1:2] -1 -2 1 -3 -4 2
$ height     : num [1:3] 1.41 1.41 3.16
$ order      : int [1:4] 1 3 2 4
$ labels     : chr [1:4] "1" "2" "3" "4"
$ method     : chr "complete"
$ call       : language hclust(d = dis)
$ dist.method: chr "euclidean"
- attr(*, "class")= chr "hclust"
>

答案 2 :(得分:0)

您可以使用以下代码:

# your data, I changed the id to characters to make it more clear
set.seed(1234) # for reproducibility
dt<-data.frame(id=c("A", "B", "C", "D"),X=sample(4),Y=sample(4))
dt

# your code, no labels    
dis<-dist(dt[,-1])
clusters <- hclust(dis)
clusters$labels

# add labels, plot and check labels
clusters$labels <- dt$id
plot(clusters)

## labels in the order plotted
clusters$labels[clusters$order]
## [1] A D B C
## Levels: A B C D

请告诉我这是否是你想要的。