【发布时间】:2018-04-06 08:21:10
【问题描述】:
我试图在矩阵的每一行中找到第一个正数或非零数。
在这里我尝试复制我的数据集:
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)
}
所以,数据如下:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] 0.6184363 0.6184363 0.6184363 0.6184363 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.000000
[2,] 0.0000000 0.8788976 0.8788976 0.8788976 0.8788976 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.000000
[3,] 0.0000000 0.0000000 0.9090922 0.9090922 0.9090922 0.9090922 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.000000
[4,] 0.0000000 0.0000000 0.0000000 0.7781090 0.7781090 0.7781090 0.7781090 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.000000
[5,] 0.0000000 0.0000000 0.0000000 0.0000000 0.5780575 0.5780575 0.5780575 0.5780575 0.0000000 0.0000000 0.0000000 0.0000000 0.000000
[6,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.9093576 0.9093576 0.9093576 0.9093576 0.0000000 0.0000000 0.0000000 0.000000
[7,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.5096778 0.5096778 0.5096778 0.5096778 0.0000000 0.0000000 0.000000
[8,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.6094725 0.6094725 0.6094725 0.6094725 0.0000000 0.000000
[9,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.7697144 0.7697144 0.7697144 0.7697144 0.000000
[10,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.8575440 0.8575440 0.8575440 0.857544
我希望结果是每行中第一个正数的索引,以便我可以通过x[vec_Indexes] 回忆这些数字。
有没有办法不用for循环?
【问题讨论】:
-
which(x == 1)是否满足您的需求? -
我需要每行中第一个正数的索引。 which(x ==1) 将返回 40 个索引: [1] 1 11 12 21 22 23 31 32 33 34 42 43 44 45 53 54 55 56 64 65 66 67 75 76 77 78 86 87 88 89 97 98 99 100 108 109 [37] 110 119 120 130
-
谢谢瓦尔!我更正了这个问题。
-
试试
which(x > 0, arr.ind = TRUE)。 -
我将 Ones 更改为随机数,因为我的数据集有不同的数字。误会请见谅!