如何找到一个数组中最小的数字,该数字直接大于另一个数组中的给定数字?

时间:2012-10-24 05:37:16

标签: r

larger1temp = wbd663$mbsf[which(wbd663$mbsf > carb663$mbsf[i])]

larger1 = larger1temp[1]

^这就是我现在的做法,但必须有一个更好的方法。这是一个循环,解释了我。

基本上,wbd663$mbsf是一个深度数组,carb663$mbsf也是一个深度数组。我想在wbd663$mbsf中找到大于给定carb663$mbsf[i]值的最小深度值。

2 个答案:

答案 0 :(得分:3)

我同意@John。作为sapply的替代方案,您可以使用findInterval,这非常快

As <- sort(A)
id <- findInterval(B, A)
As[id+1] # NA if lub does not exist.

答案 1 :(得分:2)

假设我有向量A而我有向量B的第4项。获得最小项目大于向量B第4项的语法是......

min(A[A > B[4])

但我有点担心你的问题应该真正详细说明,因为你已经在循环中获得了B的索引。你真的想要这些最低限度的每一个吗?

在这种情况下,您可以使用

sapply( B, function(x) min(A[A>x]) )

如果结果有点慢,你可以通过预先分配和使用直接索引加快速度。一个简单的版本就是。

As <- sort(A)
sapply( B, function(x) As[As>x][1] )

(好吧,实际上,这不是更快......不管怎样我都能看得更快)