R:获取矩阵的最小元素的行和列名,但最小值!= 0
Posted
技术标签:
【中文标题】R:获取矩阵的最小元素的行和列名,但最小值!= 0【英文标题】:R: Get the row and column name of the minimum element of a matrix but with minimum != 0 【发布时间】:2014-07-23 08:36:10 【问题描述】:我有一个包含很多零和正数值的矩阵。 我想获取元素所在的行号和列号 矩阵的最小非零值。
我没有发现 min() 有额外的选项来排除零,所以我怎么能 处理这个?
【问题讨论】:
请点击此链接获取答案,它可能对您有所帮助***.com/questions/2099720/mysql-find-min-but-not-zero 您好,我找不到任何有关 NULLIF 的有用信息。当我尝试运行此代码时,它给出了一个错误:'找不到函数 MIN'。 我是否必须按照以下方式填写:MIN(NULLIF(matrixname, 0))? @Silke 忽略带有链接的评论。这是给mysql
的。我真的不知道为什么那个用户会指向你那里。无关紧要。
【参考方案1】:
使用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)
您可以将此返回值转换为您需要的格式..
【讨论】:
【参考方案2】:似乎可能有一个更短的答案,但你可以用 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)
允许重复
【讨论】:
以上是关于R:获取矩阵的最小元素的行和列名,但最小值!= 0的主要内容,如果未能解决你的问题,请参考以下文章
寻找二维数组中唯一的行和列的索引,以及这些位置上元素的最小和。
matlab 求出一维矩阵中最小值,且求出该最小值在矩阵中的位置,求各位帮帮忙
在 R 中,使用 rle(运行长度编码)的结果,包括命名的行和列标题