如何不使用max.col获取距离矩阵行中值为0的列索引(无0时返回NA)
解决方案
可以通过两种简洁的方式实现需求,以下是具体代码和说明:
方法一:逐行遍历判断
直接用apply按行处理矩阵,对每行查找0的位置,无0则返回NA:
# 生成示例矩阵(可自行修改模拟存在无0行的情况) m <- -replicate(10, sample(0:9, size = 10, replace = FALSE)) # 手动模拟某行无0的场景(可选) m[3, ] <- -1:-10 # 核心处理代码 result <- apply(m, 1, function(x) { zero_idx <- which(x == 0) if (length(zero_idx) > 0) zero_idx else NA })
说明
apply(m, 1, ...):按行遍历目标矩阵mwhich(x == 0):精准获取当前行中值为0的元素列索引- 若当前行不存在0,
which返回空向量,此时直接返回NA
方法二:基于max.col的改进版
如果你习惯使用max.col,可以先通过该函数获取最大值位置(你的示例矩阵中0是每行最大值),再把无0行的结果替换为NA:
# 先获取每行最大值对应的列索引 idx <- max.col(m) # 判断每行是否包含0元素 has_zero <- apply(m, 1, function(x) any(x == 0)) # 替换无0行的结果为NA result <- ifelse(has_zero, idx, NA)
说明
- 该方法仅适用于0是每行最大值的场景(比如你的示例矩阵是取负后的结果)
any(x == 0)可以快速判断当前行是否存在0元素
内容的提问来源于stack exchange,提问作者APompetti-Cori
相关产品推荐
相关产品推荐

