我有一个向量 x
:
x <- c(-1,-0.5,-0.1,-0.001,0.5,0.6,0.9)
我想要最接近零的负值和最接近零的正值的索引。在这种情况下,4 和 5.
x
不一定要排序。我可以通过将数字设置为 NA 来做到这一点:
# negative numbers only
tmp <- x
tmp[x > 0] <- NA
which.max(tmp)
# positive numbers only
tmp <- x
tmp[x < 0] <- NA
which.min(tmp)
但这似乎很笨拙。有小费吗?
最佳答案
好场景
如果你在经典案例中,哪里
您可以简单地执行以下操作:
findInterval(0, x, TRUE) + 0:1
如果条件 1 不成立,但条件 2 和 3 仍然成立,你可以做
sig <- order(x)
sig[findInterval(0, x[sig], TRUE) + 0:1]
akrun's answer 基本相同。
糟糕的场景
一旦您的向量
x
包含 0 或绑定(bind)/重复值,事情就会变得棘手,因为:findInterval
将在 0 存在时精确定位 0。 在这种情况下,您必须调整 Ronak Shah's answer,它允许您排除 0。但请注意,如果存在重复值,
which
可能会为您提供多个索引。关于r - 获取 R 中括号为零的两个值的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52436759/