找到最小值的索引,该索引大于R中的阈值

时间:2013-08-12 14:11:00

标签: r data-manipulation

这可能非常简单,但我缺少正确的语法以简化它。

给定矩阵,在一列中找到最低值的条目,大于某个输入参数。然后,返回该对应行上不同列中的条目。不是很复杂......而且我找到了工作的东西但是,一个更有效的解决方案将不胜感激。

我找到了这个链接:Better way to find a minimum value that fits a condition?

这很好..但找到最少条目的方法会丢失在相应行中查找相应值所需的索引信息。

假设第2列是条件列,第1列是我想要返回的那个....目前我已经这样做了:(请注意,这只能起作用,因为第二行的数字小于1)。

matrix[which.max((matrix[,2]>threshhold)/matrix[,2]),1]

有什么想法?我期待有一些快速简单的功能可以产生这种效果......它从来没有被介绍给我哈哈。

2 个答案:

答案 0 :(得分:4)

rmk的答案显示了从矩阵中获取大量信息的基本方法。但是,如果您知道哪个列正在测试最小值(高于阈值),然后想要在该行中返回不同的值,则可能类似

incol<- df[,4] # select the column to search
outcol <- 2 # select the element of the found row you want to get
threshold <- 5
df[ rev(order(incol>threshold))[1] ,outcol]

答案 1 :(得分:2)

您可以尝试以下方法。说,

df <- matrix(sample(1:35,35),7,5)
> df
     [,1] [,2] [,3] [,4] [,5]
[1,]   18   16   27   19   31
[2,]   24    1    7   12    5
[3,]   28   35   23    4    6
[4,]   33    3   25   26   15
[5,]   14   10   11   21   20
[6,]    9    2   32   17   13
[7,]   30    8   29   22   34

说你的门槛是5:

apply(df,2,function(x){ x[x<5] <- max(x);which.min(x)})
[1] 6 7 2 2 2

对应于值:

[1]  9  8  7 12  5

根据原始列索引,这应该为您提供每列中最小条目的索引大于阈值。