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

如何获取R语言矩阵中仅单个非零元素的行索引?

解决方案

要找出矩阵中仅单个元素非零、其余全零的行索引,最简且通用的方法是利用rowSums()统计每行的非零元素个数,再筛选出个数为1的行:

# 计算每行非零元素的数量
non_zero_count <- rowSums(X != 0)
# 获取符合条件的行索引
result <- which(non_zero_count == 1)

针对你的矩阵X,运行这段代码会返回4,正好是你期望的结果。


为什么你的原方法没成功?

你之前的代码:

test <- which(X[,2] != 0 & X[,-2] == 0)

存在两个问题:

  1. 硬编码了列位置:只能检查「第二列非零、其他列全零」的情况,如果目标行的非零元素在其他列,这个方法就失效了。
  2. 向量与矩阵的比较问题:X[,-2] == 0返回的是一个5行4列的矩阵,而X[,2] != 0是长度为5的向量,两者进行&运算时会触发循环复制,最终得到的是一个矩阵而非行索引,自然无法得到正确结果。

补充:其他可行方法

如果你偏好使用apply(),也可以实现相同效果,但rowSums()的效率更高(因为是向量化操作):

which(apply(X != 0, 1, sum) == 1)

内容的提问来源于stack exchange,提问作者João Carvalho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:14