You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何将外部生成的linkage matrix转hclust对象绘制树状图并剪枝

手动构造hclust对象实现外部linkage matrix的聚类分析

核心逻辑

R的hclust类不要求必须从dist等内置对象转换生成,只要构造的列表包含指定字段、格式符合要求,即可正常调用plot()、cutree()等所有聚类相关函数。

实现步骤

1. 读取输入数据

# 读取外部生成的linkage matrix,需保证数据顺序为[合并簇1编号, 合并簇2编号, 合并高度, 合并后簇大小]
linkage_df <- read.csv("你的linkage matrix文件路径.csv", header = FALSE)
# 计算原始样本数n,linkage matrix的行数固定为n-1
n_sample <- nrow(linkage_df) + 1

2. 转换合并矩阵格式

注意:大部分其他语言输出的linkage matrix采用0起始的编号规则,需要转换为Rhclust要求的编号规则:叶子节点用负整数表示,已完成的合并步用正整数表示

merge_matrix <- apply(linkage_df[, 1:2], 2, function(col_val) {
  # 小于样本总数的编号为叶子节点,否则为历史合并步
  ifelse(col_val < n_sample, -(col_val + 1), col_val - n_sample + 1)
})

3. 提取合并高度向量

height_vec <- linkage_df[, 3]

4. 设置样本标签

# 替换为你实际的样本标签,顺序需和聚类输入的原始样本顺序完全一致
sample_labels <- paste0("样本_", 1:n_sample)

5. 构造hclust对象

custom_hclust <- list(
  merge = merge_matrix,
  height = height_vec,
  labels = sample_labels,
  method = "自定义" # 可替换为你实际使用的聚类方法,比如ward.D、average、single等
)
class(custom_hclust) <- "hclust"

后续分析调用

构造完成后即可正常使用所有hclust相关功能:

# 绘制树状图
plot(as.dendrogram(custom_hclust))
# 按簇数剪枝,比如分为6个簇
cut_k <- cutree(custom_hclust, k = 6)
# 按高度剪枝,比如在高度为3的位置剪枝
cut_h <- cutree(custom_hclust, h = 3)

注意事项

  • 如果你的linkage matrix编号规则不是0起始,只需调整merge_matrix的转换逻辑,保证符合R的编号规则即可正常使用
  • 构造完成后可对比R内置hclust生成的对象结构,确认字段格式匹配即可避免后续调用报错

内容的提问来源于stack exchange,提问作者wiscoYogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 21:09:04