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

如何按聚类中心数值排序重命名R语言Kmeans聚类的簇ID

重置Kmeans簇ID以匹配聚类中心数值排序

没问题,我来帮你实现这个需求——让簇ID和聚类中心的数值大小对应,簇1对应最高中心,簇2次之,簇3最低。下面是具体的实现步骤和完整代码:

步骤说明

  1. 提取kmeans结果中的聚类中心,按降序排序,得到从高到低的中心顺序并保留原簇ID标识
  2. 创建原簇ID到新簇ID的映射关系(比如原簇3对应新簇1,如果它的中心数值最高)
  3. 用这个映射替换原来的簇标签,完成ID重置

完整代码示例

# 生成测试数据框
id <- seq(1, 100, by=1)
nums <- runif(100, min=0, max=10)
df <- data.frame(id, nums)

# 运行Kmeans聚类
km <- kmeans(df$nums, 3, nstart = 20)
cat("原始聚类中心:\n")
print(km$centers)

# --- 核心:重置簇ID ---
# 1. 按降序排序聚类中心,保留原簇ID的名称
sorted_centers <- sort(km$centers, decreasing = TRUE)
# 2. 创建映射:原簇ID → 新簇ID(1=最高,2=次高,3=最低)
cluster_mapping <- setNames(1:length(sorted_centers), names(sorted_centers))
# 3. 替换原簇标签
km$cluster <- cluster_mapping[as.character(km$cluster)]

# 验证结果
cat("\n重置后的簇ID对应的聚类中心:\n")
print(tapply(df$nums, km$cluster, mean))

效果说明

运行这段代码后,你会看到重置后的簇1对应数值最高的聚类中心,簇2对应次高值,簇3对应最低值。tapply计算的结果会直接验证这个对应关系是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:58