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

在R语言中提取矩阵每行前n个正值列并生成新矩阵

R语言提取矩阵每行前2个正值的方法

首先,先复现题目中的具体矩阵(避免rnorm()的随机结果差异):

x_mat <- matrix(
  c(
    0.4530790, -0.6345827, -0.09875488, -2.1310380, 1.2052932,
    0.8857939, 1.7273651, -1.66136354, 1.2525782, 1.3527161,
    -0.2236681, 0.2938106, 0.45233337, 0.4916921, 1.0909765,
    1.5959947, -0.9065362, -0.78020171, -1.0510121, 0.8550553,
    0.1472118, 0.7305333, 0.87001933, -2.0218497, -0.7610662
  ),
  nrow = 5, byrow = TRUE
)

方法1:基础R的apply函数

这是最直接的基础R解决方案,逐行处理筛选:

# 提取每行前2个正值并转置为目标矩阵
result_mat <- t(apply(x_mat, 1, function(row) {
  positives <- row[row > 0]
  positives[1:2]
}))

# 输出结果
result_mat

运行后得到的结果与题目要求完全一致:

[,1]      [,2]
[1,] 0.4530790 1.2052932
[2,] 0.8857939 1.7273651
[3,] 0.2938106 0.4523334
[4,] 1.5959947 0.8550553
[5,] 0.1472118 0.7305333

方法2:tidyverse工具链(适合习惯tidy语法的用户)

如果常用tidyverse包,可以用行式处理实现:

library(tidyverse)

result_tidy <- x_mat %>%
  as_tibble() %>%
  rowwise() %>%
  # 收集每行的所有正值
  mutate(positives = list(c_across(everything())[c_across(everything()) > 0])) %>%
  # 提取前2个正值
  mutate(first_pos = positives[[1]], second_pos = positives[[2]]) %>%
  select(first_pos, second_pos) %>%
  as.matrix()

result_tidy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:25:14