r - 我需要在矩阵的每一列中找到第一个负数

标签 r matrix vector match

你好,我需要找到矩阵中每个行向量的第一个负数的位置

我试过匹配并应用,但它只显示第一个

z<-matrix(c(-3,2,-1,3,2,-2,3,-4,-1),ncol=3)
k<-z<0
h<-apply(k,1,function(x) match(TRUE,k))

我想让它显示 [1,3,2] 但它只显示整个矩阵 [1,1,1] 的第一个匹配项

最佳答案

我们可以使用 max.colties.method = "first" 来得到第一个负数

max.col(z < 0, ties.method = "first")
#[1] 1 3 1

使用apply你可以做到

apply(z < 0, 1, which.max)

这两种方法都要求行中至少有一个负数,否则它将返回第一个索引。为避免这种情况,我们可以使用 rowSums 检查行中是否至少有一个负数,然后使用 max.col。没有负值的行将得到 0。

(rowSums(z < 0) > 0) * max.col(z < 0, ties.method = "first")

关于r - 我需要在矩阵的每一列中找到第一个负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55820648/

相关文章:

r - spinplot如何绘制类似ggplot2的堆积条形图?

regex - 使用正则表达式从 R 中的字符串中获取数据

R 正则表达式问题 : "-\\s[A-Z]" Lowercase the matched uppercase letter and delete dash+whitespace

用矩阵中的列表替换奇异值

c++ - 如何将 vector 序列化为字符数组

r - 在 rscript 中加载 Rdata 文件

php - 如何使用 PHP 从距离矩阵中获取聚类?

ios - 如何使用 4x4 矩阵变换或欧拉角旋转 3d 矢量?

vector - 如何将 Vec 发送到以迭代器作为参数的函数?

c++ - 将 std::find_if() 与采用多个输入参数的比较函数一起使用