R - 为向量中的每个元素找到满​​足不等式的向量中的第一个元素/位置

时间:2017-03-30 10:05:23

标签: r

我们说我有一个向量 Y 。如果我想知道 Y 大于4的位置,我可以使用类似which(Y>4)的东西,函数Position等等。但是,现在我有一个向量< em> X 我想为 X 的每个元素 x 获取一个元素为which(Y>x)的向量。我可以通过循环来做到这一点,但是对于大型向量 X 我想要应用它,这是非常低效的。

什么是实现我想要的更有效,矢量化的方式?

1 个答案:

答案 0 :(得分:0)

您可以使用outer包中的base功能:

如果您需要满足Y > X[i]的所有索引的列表:

## Test data:
Y <- c(3,6,7,2,9,6,12,5,2,8)
X <- c(4,6,8)

indicesList <- apply(X = outer(Y, X, '>'), MARGIN = 2, FUN = which)

> indicesList
[[1]]
[1]  2  3  5  6  7  8 10

[[2]]
[1]  3  5  7 10

[[3]]
[1] 5 7

如果您只想在Y中找到满足Y > X[i]的第一个元素:

firstIndicesVec <- apply(X = outer(Y, X, '>'), MARGIN = 2, FUN = function(x) min(which(x)))

> firstIndicesVec
[1] 2 3 5