R 求矩阵中的第一个正数

R 求矩阵中的第一个正数,r,matrix,subset,R,Matrix,Subset,我试图在矩阵的每一行中找到第一个正数或非零数 在这里,我尝试复制我的数据集: x <- matrix(0,10,13) y <- seq(1,10,1) set.seed(1) for(i in 1:10){ x[y[i],c(y[i]:(y[i]+3))] <- runif(1,min = .5) } 我希望结果是每行第一个正数的索引,这样我就可以通过x[vec\u index]调用这些数字 有没有一种方法可以在没有for循环的情况下执行此操作?另一种方法是使用获

我试图在矩阵的每一行中找到第一个正数或非零数

在这里,我尝试复制我的数据集:

x <- matrix(0,10,13)
y <- seq(1,10,1)
set.seed(1)

for(i in 1:10){
    x[y[i],c(y[i]:(y[i]+3))] <- runif(1,min = .5)
}
我希望结果是每行第一个正数的索引,这样我就可以通过
x[vec\u index]
调用这些数字


有没有一种方法可以在没有for循环的情况下执行此操作?

另一种方法是使用
获取数组索引,其中(x>0,arr.ind=TRUE)
,然后使用例如
dplyr
获取第一列:

library(dplyr)

data.frame(which(x>0,arr.ind = T)) %>%  group_by(row) %>% slice(which.min(col))

# # A tibble: 10 x 2
# # Groups:   row [10]
# row   col
# <int> <int>
#   1     1     
#   2     2     
#   3     3     
#   4     4     
#   5     5     
#   6     6     
#   7     7     
#   8     8     
#   9     9     
#  10    10    
库(dplyr)
data.frame(其中(x>0,arr.ind=T))%%>%groupby(row)%%>%slice(其中.min(col))
##A tible:10 x 2
##组:第[10]行
#行列
#  
#   1     1     
#   2     2     
#   3     3     
#   4     4     
#   5     5     
#   6     6     
#   7     7     
#   8     8     
#   9     9     
#  10    10    

如果矩阵只包含值0和1,我们可以将
max.col
ties=“first”
一起使用,它将返回行中最高值的索引,如果是tie,则返回第一个索引

max.col(x, ties.method = "first")
#[1]  1  2  3  4  5  6  7  8  9 10
如果它包含0和1以外的值,我们可以通过将其与0进行比较来创建逻辑矩阵

x[1, 2]  <- 3
max.col(x > 0, ties.method = "first")
#[1]  1  2  3  4  5  6  7  8  9 10
x[1,2]0,ties.method=“first”)
#[1]  1  2  3  4  5  6  7  8  9 10

哪个(x==1)做你需要的事?我需要每行第一个正数的索引。其中(x==1)将返回40个索引:[1]11121221231313334424344455354555664666775767778868889979899100108[37]110119120130VAL!我更正了这个问题。请尝试
哪个(x>0,arr.ind=TRUE)
。由于我的数据集有不同的数字,我将其更改为随机数。对不起,误会了!我可以通过将随机数转换成1并得到子集来使用它。谢谢
x[1, 2]  <- 3
max.col(x > 0, ties.method = "first")
#[1]  1  2  3  4  5  6  7  8  9 10