在 R 中将数字四舍五入到最接近的值(具有不同的间隔)

Rounding numbers to the nearest values (with different intervals) in R

我想舍入(或替换)a

中的数字
a <- c(0.505, 1.555, 2.667, 53.850, 411.793)

b 中最接近的值:

b <- c(0, 5, 10, 50, 100, 200, 500)

输出将是这样的:

a_rnd <- c(0, 0, 5, 50, 500)

逻辑很简单,但我找不到任何解决方案,因为我找到的所有方法都要求 b 中的值具有相等的间隔!

我怎样才能做到这一点?

您可以使用 sapply 遍历 a 的所有值并使用这些索引提取正确的 b

b[sapply(a, function(x) which.min(abs(x - b)))]
#> [1]   0   0   5  50 500

这是一个比较简单的方法:

b[apply(abs(outer(a, b, "-")), 1, which.min)]