我有一个带有很多零和正数值的矩阵。 我想获得元素所在的行号和列号 矩阵的最小NONZERO值。
我没有发现min()有额外的选项来排除零,所以我怎么能 处理这个?
答案 0 :(得分:1)
似乎可能有一个较短的答案,但你可以用NA替换零并使用na.rm = T
test = matrix(c(0:9,0:9),nrow =4,ncol=5)
test[which(test==0)] = NA
minValue = min(test,na.rm=T)
rows = which(apply(test,1,min,na.rm=T)==minValue)
cols = which(apply(test,2,min,na.rm=T)==minValue)
允许重复
答案 1 :(得分:0)
使用x[x>0]
,您可以直接找到非零元素,但是如果您想要行号和列号,则必须付出额外的努力。我已经使用了apply方法,它会返回行号和列号索引...
set.seed(1234)
set.seed(1234)
myMat = matrix(sample(0:1,replace=T,25),nrow=5)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 1 1 0
[2,] 1 0 1 0 0
[3,] 1 0 0 0 0
[4,] 1 1 1 0 0
[5,] 1 1 0 0 0
#Defining a function which will return zero valued member index
FindIndex = function(x){
v=vector()
j=1
for(i in 1:length(x)){
if(x[i]>0){
v[j]=i
j=j+1
}
}
return = v
}
#Find column number row-wise
apply(myMat, 1, FUN=FindIndex)
[[1]]
[1] 2 3 4
[[2]]
[1] 1 3
[[3]]
[1] 1
[[4]]
[1] 1 2 3
[[5]]
[1] 1 2
#Find row number column-wise
apply(myMat, 2, FUN=FindIndex)
[[1]]
[1] 2 3 4 5
[[2]]
[1] 1 4 5
[[3]]
[1] 1 2 4
[[4]]
[1] 1
[[5]]
logical(0)
您可以将此返回值转换为所需的格式..