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

如何在R语言中按行提取矩阵a、b列组的最小值?

嘿,我来帮你搞定这个按行提取分组列最小值的需求!

先看你的数据,已经给矩阵设置了a和b的列名分组,要每行分别找出a列组和b列组的最小值,这里有两种实用的方法:

方法一:基础R原生方法

用apply配合split就能轻松实现,代码简单直接:

set.seed(1234)
M = matrix(sample(20,20), ncol=4)
colnames(M) = c("a","b","a","b")

# 核心代码
result <- t(apply(M, 1, function(x) sapply(split(x, colnames(M)), min)))
colnames(result) <- c("a", "b")

# 查看结果
result

运行后输出就是你想要的:

a b
[1,] 3 9
[2,] 5 1
[3,]11 4
[4,]15 8
[5,] 2 6

逻辑解释:

  • apply(M, 1, ...) 按行遍历整个矩阵
  • 对每一行的数值向量,split(x, colnames(M))会把它按列名分成a和b两个子组
  • sapply遍历这两个子组,分别计算最小值
  • 最后用t()转置结果,让输出格式和原矩阵的行结构对应

方法二:tidyverse风格(适合数据框操作习惯)

如果你平时常用dplyr这类工具,可以用长格式转宽格式的思路来做:

library(dplyr)
library(tidyr)
library(tibble)

set.seed(1234)
M = matrix(sample(20,20), ncol=4)
colnames(M) = c("a","b","a","b")

result <- as_tibble(M, rownames = "row_id") %>%
  # 转成长格式,方便分组统计
  pivot_longer(-row_id, names_to = "group", values_to = "value") %>%
  # 按行和分组取最小值
  group_by(row_id, group) %>%
  summarise(min_val = min(value), .groups = "drop") %>%
  # 转回宽格式,恢复类似矩阵的结构
  pivot_wider(names_from = group, values_from = min_val) %>%
  # 移除行号列并转成矩阵(可选,按需调整)
  select(-row_id) %>%
  as.matrix()

result

这个方法更偏向数据处理的直观逻辑,适合习惯tidyverse生态的用户,结果和第一种方法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:06:57