这个问题似乎尚未在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]
。
请注意,a
和b
的长度可以不同。
答案 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