0

这可能很简单,但为了简化它,我缺少正确的语法。

给定一个矩阵,找出一列中的最小值,大于某个输入参数。然后,在相应行的不同列中返回一个条目。不是很复杂......而且我发现了一些可行的方法,更有效的解决方案将不胜感激。

我找到了这个链接:找到适合条件的最小值的更好方法?

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

假设第 2 列是条件列,第 1 列是我要返回的列....目前我已经这样做了:(请注意,这仅有效,因为第 2 行充满了小于 1 的数字)。

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

有什么想法吗?我期待可能有一些快速简便的功能具有这种效果……只是从未向我介绍过哈哈。

4

2 回答 2

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]
于 2013-08-12T15:16:12.663 回答
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

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

于 2013-08-12T14:26:57.643 回答