在两个向量中找到最接近的,跟随的数字

时间:2018-07-16 09:50:03

标签: r sorting vector

这个问题似乎尚未在R中解决。因此,例如,

a <- c(20, 104, 380, 388)
b <- c(16, 38, 108, 130, 200, 222, 291, 314, 384, 406, 476, 498, 568, 591)

我如何在b中找到那些在a之后的数字?因此,这里的解决方案应该是[38 108 384 406]

请注意,ab的长度可以不同。

4 个答案:

答案 0 :(得分:5)

这利用了findInterval函数:

b[findInterval(a, b)+1]
#### [1]  38 108 384 406

此(以及此处建议的其他一些解决方案)需要您先前对b向量进行排序。

您可以使用参数left.open来确定数字相等时想要的行为。

答案 1 :(得分:3)

 b[colSums(sapply(a,">",b))+1]
[1]  38 108 384 406

您还可以想到:

b[as.numeric(cut(a,b))+1]
[1]  38 108 384 406

答案 2 :(得分:0)

通过循环:

for (i in 1:length(a)){
  c[i]<-b[which (b>=a[i])[1]]
}
> c
[1]  38 108 384 406

答案 3 :(得分:0)

sapply(a, function(x) min(b[b > x]))
[1]  38 108 384 406