这可能非常简单,但为了简化语法,我忽略了正确的语法。
给定一个矩阵,在一个列中查找条目,该列是最小值,大于某个输入参数。然后,在相应行的另一列中返回一个条目。不是很复杂..。我发现了一些有用的东西,但是,一个更有效的解决方案将是非常感谢的。
我找到了这个链接:Better way to find a minimum value that fits a condition?
这很好..。但是,查找最小项的方法会丢失在相应行中查找相应值所需的索引信息。
假设第2列是条件列,第1列是我想返回的.目前,我已经这样做了:(请注意,这仅仅是因为第二行充满了小于1的数字)。
matrix[which.max((matrix[,2]>threshhold)/matrix[,2]),1]
有什么想法吗?我希望有一些快速和容易的功能,有这样的效果.只是从来没向我介绍过哈哈。
发布于 2013-08-12 06:26:57
你可以试试以下的方法。说,
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-12 07:16:12
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]
https://stackoverflow.com/questions/18189185
复制相似问题