比较两个向量的最接近的较小值和较大值
closest smaller and bigger value comparing two vectors
假设我有两个向量
a <- c(5,10,12)
b <- c(4,11,15)
我想比较 a 和 b 并获得最接近每个元素的较小值。最接近 5 的较小值是 4,对于 10 是 4,对于 12 是 11。相同但找到最接近的较大值。 5是11,10是11,12是15.
最接近的较小值的所需向量:
4 4 11
最接近的较大值的所需向量:
11 11 15
我找到了另一个使用最接近 DescTools 包的函数的示例,但结果不同
> unlist(lapply(a, function(i) min(Closest(x = b, a = i))))
[1] 4 11 11
> unlist(lapply(a, function(i) max(Closest(x = b, a = i))))
[1] 4 11 11
你知道我怎样才能实现我的 objective 吗?
应该这样做:
> sapply(a,function(x) b[tail(which(b<x),1)])
[1] 4 4 11
> sapply(a,function(x) b[head(which(b>x),1)])
[1] 11 11 15
假设两者都是有序且唯一的:
idx <- findInterval(a, b)
a[idx]
[1] 5 5 10
b[idx+1]
[1] 11 11 15
假设我有两个向量
a <- c(5,10,12)
b <- c(4,11,15)
我想比较 a 和 b 并获得最接近每个元素的较小值。最接近 5 的较小值是 4,对于 10 是 4,对于 12 是 11。相同但找到最接近的较大值。 5是11,10是11,12是15.
最接近的较小值的所需向量:
4 4 11
最接近的较大值的所需向量:
11 11 15
我找到了另一个使用最接近 DescTools 包的函数的示例,但结果不同
> unlist(lapply(a, function(i) min(Closest(x = b, a = i))))
[1] 4 11 11
> unlist(lapply(a, function(i) max(Closest(x = b, a = i))))
[1] 4 11 11
你知道我怎样才能实现我的 objective 吗?
应该这样做:
> sapply(a,function(x) b[tail(which(b<x),1)])
[1] 4 4 11
> sapply(a,function(x) b[head(which(b>x),1)])
[1] 11 11 15
假设两者都是有序且唯一的:
idx <- findInterval(a, b)
a[idx]
[1] 5 5 10
b[idx+1]
[1] 11 11 15