在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
相关产品推荐
相关产品推荐

