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

在R语言中获取列最大值对应的重复列索引列表

问题:按列最大值分组整理列索引

给定如下R矩阵:

mat <- matrix(c(3,2,7,8,5,12,4,5,8,9,1,12,4,17,1,2,6,17,8,5),byrow=T,nrow=4)
colnames(mat) <- c(1,2,3,4,5); rownames(mat) <- c(1,2,3,4)
mat
#    1  2  3  4 5
# 1  3  2  7  8 5
# 2 12  4  5  8 9
# 3  1 12  4 17 1
# 4  2  6 17  8 5

已通过以下代码获取每列最大值:

apply(mat,2,max)
#  1  2  3  4  5 
# 12 12 17 17  9 

需要将具有相同最大值的列索引整理为如下格式的列表:

[[1]]
[1] 1 2

[[2]]
[1] 3 4

[[3]]
[1] 5

解决方案

可以结合apply()和split()函数实现需求,代码如下:

# 第一步:获取每列的最大值
col_max <- apply(mat, 2, max)

# 第二步:按最大值分组拆分列索引
result <- split(as.integer(names(col_max)), col_max)

# 若不需要列表元素的最大值名称,可清空名称
names(result) <- NULL

# 查看最终结果
result

运行后直接得到目标格式输出:

[[1]]
[1] 1 2

[[2]]
[1] 3 4

[[3]]
[1] 5

代码说明

  • apply(mat, 2, max):按列计算最大值,得到带列名的向量。
  • as.integer(names(col_max)):将字符型的列名转换为整数类型的列索引。
  • split(x, f):根据f的分组规则,把x的元素拆分到不同列表项中,这里就是按列最大值对列索引分组。
  • names(result) <- NULL:清空列表元素的最大值名称,让输出完全匹配需求格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:56:10