作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 R 中的树状图中提取分类,我是 cut
在一定的高度。使用 cutree
很容易做到这一点在 hclust
上对象,但我不知道如何在 dendrogram
上执行此操作目的。
此外,我不能只使用来自原始 hclust 的集群,因为(令人沮丧的是)来自 cutree
的类的编号。与 cut
的类编号不同.
hc <- hclust(dist(USArrests), "ave")
classification<-cutree(hc,h=70)
dend1 <- as.dendrogram(hc)
dend2 <- cut(dend1, h = 70)
str(dend2$lower[[1]]) #group 1 here is not the same as
classification[classification==1] #group 1 here
dendrogram
中提取较低的分支成员资格对象(也许巧妙地使用了
dendrapply
?)的格式更像是
cutree
给?
最佳答案
我建议您使用 cutree
来自 dendextend 的函数包裹。它包括一个树状图方法(即: dendextend:::cutree.dendrogram
)。
您可以从 its introductory vignette 了解有关该软件包的更多信息.
我应该补充一点,虽然你的函数( classify
)很好,但使用 cutree
有几个优点。来自 denextend:
k
(簇数),而不仅仅是 h
(特定的高度)。 classify
不会)。 # Toy data:
hc <- hclust(dist(USArrests), "ave")
dend1 <- as.dendrogram(hc)
# Get the package:
install.packages("dendextend")
library(dendextend)
# Get the package:
cutree(dend1,h=70) # it now works on a dendrogram
# It is like using:
dendextend:::cutree.dendrogram(dend1,h=70)
dend1 <- color_branches(dend1, k = 4)
dend1 <- color_labels(dend1, k = 5)
plot(dend1)
# This would also work with k:
cutree(dend1,k=4)
# and would give identical result as cutree on hclust:
identical(cutree(hc,h=70) , cutree(dend1,h=70) )
# TRUE
# But this is not the case for classify:
identical(classify(dend1,70) , cutree(dend1,h=70) )
# FALSE
install.packages("microbenchmark")
require(microbenchmark)
microbenchmark(classify = classify(dend1,70),
cutree = cutree(dend1,h=70) )
# Unit: milliseconds
# expr min lq median uq max neval
# classify 9.70135 9.94604 10.25400 10.87552 80.82032 100
# cutree 37.24264 37.97642 39.23095 43.21233 141.13880 100
# 4 times faster for this tree (it will be more for larger trees)
# Although (if to be exact about it) if I force cutree.dendrogram to not go through hclust (which can happen for "weird" trees), the speed will remain similar:
microbenchmark(classify = classify(dend1,70),
cutree = cutree(dend1,h=70, try_cutree_hclust = FALSE) )
# Unit: milliseconds
# expr min lq median uq max neval
# classify 9.683433 9.819776 9.972077 10.48497 29.73285 100
# cutree 10.275839 10.419181 10.540126 10.66863 16.54034 100
关于r - 从 R 中的切割树状图中提取标签成员/分类(即 : a cutree function for dendrogram),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452472/
我是一名优秀的程序员,十分优秀!