r - 如何将无监督的层次聚类结果与原始数据合并
问题描述
我在 R 中进行了无监督的层次聚类分析。我的数据是 3 列和大约 120,000 行的数字。我设法使用切割树并识别了 6 个集群。现在,我需要将这些集群恢复为原始数据,即添加另一列指示集群组(1 个,共 6 个)。我怎么能这样做?
# Ward's method
hc5 <- hclust(d, method = "ward.D2" )
# Cut tree into 6 groups
sub_grp <- cutree(hc5, k = 6)
# Number of members in each cluster
table(sub_grp)
我需要它,因为我的数据有空间链接,因此我想将集群映射回它们在地图上的位置。我感谢您的帮助。
解决方案
变量 sub_grp 只是集群分配的向量,因此您可以将其添加到数据框中:
data(iris) # Data frame available in base R.
str(iris)
d <- dist(iris[, -5]) # Column 5 is the species name so we drop it
hc5 <- hclust(d, method="ward.D2")
sub_grp <- cutree(hc5, k=3)
str(sub_grp)
iris$grp <- sub_grp
str(iris)
aggregate(iris[, 1:4,], by=list(iris$grp), mean)
xtabs(~grp+Species, iris)
最后两个命令按组计算 4 个数值变量的平均值,并将集群分配与已知物种交叉制表。您实际上不需要将集群分配添加到数据框中。R 允许您组合来自不同对象的变量,只要它们具有相同的行数。
推荐阅读
- reactjs - 无法关闭特定 URL 的 IONIC InAppBrowser
- javascript - 如何将 maxlength 应用于 Summernote?它必须包含 base64 图像
- groovy - Groovy Spock 如何从 java 类中模拟静态函数
- vue.js - 登录用户的本地存储问题
- python - 在 Arduino 上使用 TensorFlow 找到最可能的结果(将 Python 程序转换为 Arduino ide 草图)
- android - 面对 java.net.SocketException: Socket 在 Android 中关闭
- c++ - 我在 thiscscope cpp 中并不清楚,但另一个我正在工作 Q:ARRAY OF OBJECT
- python - 如何让 Python 多线程管道使用 90% 的可用内存?
- amazon-web-services - 将 ROS 与 nvidia isaac 集成
- python - 为什么标题在 tkinter 中没有改变?