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

R语言如何获取各列colMeans最大值对应的kmeans聚类编号

代码实现方案

第一步:批量计算各聚类下的列均值,替代逐组显式索引的冗余写法

不需要手动逐行写cm1、cm2这类重复代码,直接通过聚合函数一次性拿到所有聚类的组内列均值:

# 按kmeans输出的聚类标签分组,计算每个组下所有列的均值
group_means <- aggregate(df, by = list(cluster = fit$cluster), FUN = mean)

计算完成后把聚类编号设为矩阵行名,移除单独的聚类数值列,得到纯均值矩阵方便后续运算:

rownames(group_means) <- group_means$cluster
mean_mat <- as.matrix(group_means[, -1])

此时矩阵结构为:每一行对应一个聚类的全列均值,每一列对应原数据框的某一列在所有聚类下的均值分布。

第二步:按排名位次提取对应聚类编号

写一个通用函数,针对矩阵的每一列(也就是原数据框的每一列),按照均值从高到低排序,提取指定位次对应的聚类编号:

# 入参mean_mat是上一步得到的均值矩阵,k是想要的排名位次
# 常用取值:k=1对应最高均值,k=2对应次高均值,k=3对应第三高均值
get_cluster_by_rank <- function(mean_mat, k) {
  apply(mean_mat, 2, function(current_col) {
    # 对当前列的所有聚类均值降序排序,返回对应位次的聚类名
    ranked_clusters <- names(sort(current_col, decreasing = TRUE))
    ranked_clusters[k]
  })
}

实际调用示例

# 返回每列最高均值对应的聚类编号,输出长度和原数据框列数完全一致
result_max <- get_cluster_by_rank(mean_mat, k = 1)
# 返回每列次高均值对应的聚类编号
result_second <- get_cluster_by_rank(mean_mat, k = 2)
# 返回每列第三高均值对应的聚类编号
result_third <- get_cluster_by_rank(mean_mat, k = 3)

实现特性

  • 不需要手动适配聚类数量,不管kmeans分出多少个组,代码逻辑完全不用修改
  • 自动处理均值并列的场景,不会因为数值重复出现排序报错
  • 支持任意排名位次调整,不管是要取最高值、次高值还是更低位次的聚类,只要修改传入的k参数即可
  • 如果传入的排名k超过了实际聚类总数,会自动返回NA,不会触发索引越界的崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 13:15:04