如何挑选出矩阵中的特定值 [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]的主要内容,如果未能解决你的问题,请参考以下文章