【发布时间】:2018-12-23 20:03:25
【问题描述】:
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 的长度可能不同。
【问题讨论】:
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 的长度可能不同。
【问题讨论】:
这利用了findInterval 函数:
b[findInterval(a, b)+1]
#### [1] 38 108 384 406
这(可能还有这里建议的其他一些解决方案)需要您之前对 b 向量进行排序。
您可以使用参数left.open 来决定当数字相等时您想要什么行为。
【讨论】:
b[colSums(sapply(a,">",b))+1]
[1] 38 108 384 406
你也可以想到:
b[as.numeric(cut(a,b))+1]
[1] 38 108 384 406
【讨论】:
b 的每个元素与a 的每个元素之间的比较。跨度>
通过for循环:
for (i in 1:length(a)){
c[i]<-b[which (b>=a[i])[1]]
}
> c
[1] 38 108 384 406
【讨论】:
sapply(a, function(x) min(b[b > x]))
[1] 38 108 384 406
【讨论】: