簡體   English   中英

R 用 1 到 -1 之間的負數和正數縮放向量

[英]R Scale a vector with negative and positive numbers between 1 and -1

我有一個向量如下

vec <- c(0, -0.072, -0.092, -0.092, -0.222, -0.445, -0.345, -0.031, 
0.016, 0.158, 0.349, 0.749, 1.182, 1.289, 1.578, 1.767, 1.621, 
1.666, 1.892, 1.866, 1.821, 1.702, 1.69, 1.53, 1.38, 1.494, 1.833, 
2.392, 2.502, 2.921, 3.363, 3.698, 3.645, 3.89, 3.987, 4.066, 
3.963, 3.749, 3.512, 3.259, 3.153, 2.972, 2.918, 2.93, 2.719, 
2.458, 2.275, 2.346, 2.588, 2.774, 2.607, 2.336, 1.799, 1.365, 
1.025, 0.379, -0.087, -0.765, -1.19, -1.423, -1.751, -1.965, 
-1.907, -1.919, -1.848, -1.772, -1.49, -1.19, -1.104, -1.138, 
-1.054, -1.139, -1.269, -1.429, -1.56, -1.543, -1.364, -1.318, 
-1.094, -1.061, -0.918, -0.861, -0.913, -0.767, -0.615, -0.532, 
-0.615, -0.688, -0.75, -0.724, -0.755, -0.685, -0.752, -0.863, 
-0.944, -1.004, -1.02, -1.041, -1.073, -1.392)

下面的代碼在 1 和 -1 之間完美地縮放這個向量。

scale <- function(input)
{
  min_val = min(input, na.rm = T)
  max_val = max(input, na.rm = T)
  
  average = (min_val + max_val) / 2
  range = (max_val - min_val) / 2
  normalized_x = (input - average) / range
  return(normalized_x)
}

但是,我想將此向量從 -1 縮放到 1,同時保持中點為 0。

有人可以改進上面的 function 以使這個縮放圍繞 0 居中嗎?

謝謝!

將此操作稱為“規范化”是相當令人困惑的。 正確的術語是縮放。 歸一化意味着您已將值轉換為類似於正態分布的東西。 (有一個名為scale的 R function ,)

這會將低於 0 的值縮放到范圍 [-1, 0) 並將高於 0 的值縮放到范圍 (0,1] 這是我理解的願望:

c( -vec[vec<0]/min(vec), vec[vec>=0]/max(vec) )

但是,它們不是原始順序。 如果需要,您可能需要執行ifelse操作:

 newvec <- ifelse(vec < 0 , -vec[vec<0]/min(vec), vec[vec>=0]/max(vec)  )
  #-------------
 > sum(newvec<0)
[1] 51
> sum(newvec>0)
[1] 47
> sum(newvec==0)
[1] 2

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM