如何挑选出矩阵中的特定值 [R]

Posted

技术标签:

【中文标题】如何挑选出矩阵中的特定值 [R]【英文标题】:How to single out specific values in a matrix [R] 【发布时间】:2022-01-05 05:29:13 【问题描述】:

您好,我有一个难题。我这里有一个以下矩阵:

         [,1]     [,2]     [,3]     [,4]     [,5]
  [1,] 0.000000 1.414214 2.828427 4.242641 5.656854
  [2,] 1.414214 0.000000 1.414214 2.828427 4.242641
  [3,] 2.828427 1.414214 0.000000 1.414214 2.828427
  [4,] 4.242641 2.828427 1.414214 0.000000 1.414214
  [5,] 5.656854 4.242641 2.828427 1.414214 0.000000

我的问题是如何在上面的矩阵中挑选出最小的非零值。显然,如果我使用 min(A) 我会得到 0 作为答案,但我想要的是值 1.414214

【问题讨论】:

【参考方案1】:

a 的最小值,其中 a 不等于 0

min(a[a!=0])

带有打印索引的功能:

min_value <- function(M)
  
  minval <- min(M[M!=0])
  index <- which(M==minval, arr.ind=TRUE)
  
  print(paste("The smallest non-zero value (", minval, ") is located in:", sep=""))
  
  for(i in 1:nrow(index))
    print(paste("row[", index[i, 1] ,"] and column[", index[i, 2], "]", sep="" ))
  
  
  return(list(min_value=minval, index=index))

【讨论】:

【参考方案2】:

我们可以将tail()which 一起使用:这里mat 是您的矩阵

    从第一个非零值中获取索引yourIndex 然后调用矩阵中的值
yourIndex <- tail(which(mat!=0),1)
mat[yourIndex]

OR shorter:

mat[tail(which(mat!=0,1)
> mat[yourIndex]
[1] 1.414214

【讨论】:

有没有办法可以把它放在一个函数中,一旦我找到了值,它就会打印以下单词。 print(The smallest non-zero value is located in column[j] and row[i]。它应该适用于所有矩阵,而不仅仅是上面提到的那个。这有点像在 python 中你可以一次打印两个东西(一个语句和一个值),但这次我希望它能够自动为任何矩阵工作【参考方案3】:

使用矩阵你可以做一个简单的for循环

min_numbers <- rep(NA,5)

for (i in 1:5)
  min_numbers[i] <- min(m[(m[,i] > 0),i])


min_numbers

但我宁愿使用tydiverse 上的数据框

【讨论】:

以上是关于如何挑选出矩阵中的特定值 [R]的主要内容,如果未能解决你的问题,请参考以下文章

R:如何删除矩阵中的特定行? [复制]

R学习-6.Subsetting Vectors

使用 Python 替换矩阵中的特定值

Oracle regexp_replace 挑选出模式匹配组

如何应用循环遍历 R 中的矩阵

如何正确挑选出单元格附件视图