如何重新调整我的变量,使其中位数为 0,最小值不超过 -1,最大值不超过 +1?

How can I rescale my variable so that its median is 0, its min does not exceed -1 and its max does not exceed +1?

我正在尝试创建箱线图,其中我的变量的中位数在 0 处对齐。它们的范围不必固定在 [-1, 1],但我希望它们的最小值和最大值落在这个范围内范围。有我可以使用的操作吗?

我能够在 [-1, 1] 中标准化我的变量,但我的目标是让中位数对齐到 0,并且它们的范围刚好落在(不固定在)[-1, 1] 内.

这是执行此操作的函数。它找到哪个极端距离中位数更远,然后使用中位数和与中位数的最大距离将所有内容缩放到 -1 到 1 之间的范围内,中位数位于中心。如果数据没有范围(即最小值 = 中值 = 最大值),这将中断,因为这将导致无限的重新缩放因子,但我不确定在这种情况下预期的行为应该是什么。

rescale_center_median <- function(my_numbers) {
  my_median = median(my_numbers, na.rm = TRUE)
  my_range = range(my_numbers, na.rm = TRUE)
  scale_factor = max(abs(my_range-my_median))
  (my_numbers - my_median) / scale_factor
}

测试:

set.seed(42)
rescale_center_median(rnorm(10))
# [1]  0.60393025 -0.58015650 -0.01258313  0.15241963  0.01258313 -0.29963620  0.68991628
# [8] -0.29262249  1.00000000 -0.27308102
median(scaled_numbers)
#[1] 0
> range(scaled_numbers)
[1] -0.4922334  1.0000000