假设我有一个像这样的数据集
dt<-data.frame(id=1:4,X=sample(4),Y=sample(4))
然后我尝试使用以下代码进行分层聚类
dis<-dist(dt[,-1])
clusters <- hclust(dis)
plot(clusters)
并且效果很好
关键是我要求
clusters$labels
它给了我 让它们按照在剧情中添加的顺序非常重要 NULL
,同时我希望看到的个人标签
1, 4, 2, 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根本没有标签。
答案 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
请告诉我这是否是你想要的。