2011-04-14 102 views
21

可能重複:
scale a series between two points in R範圍標準化(0到1)

是否的R函數的任何知道在載體上進行標準化範圍?我正在尋找將變量轉換爲0和1之間的比例,同時保留排名順序和值之間的相對分隔大小。

只是要清楚,我不想通過SD的平均居中和縮放來標準化變量,就像在函數scale()中所做的那樣。

我嘗試了包'dprep'中的函數mmnorm()和rangenorm(),但是這些似乎並沒有完成這項工作。

+4

同爲http://計算器.com/questions/5468280/scale-a-series-between-two-in-r/5468527#5468527 – Andrie 2011-04-14 15:28:40

+0

它與stats.stackexchange上的這個問題也非常相似:http://stats.stackexchange.com/q/1112/442 – Henrik 2011-04-14 15:51:58

+3

請勿刪除它;關閉它。它與另一個問題相關聯,所以它可能對使用搜索功能的用戶有用。 – 2011-04-14 16:49:46

回答

40
s = sort(rexp(100)) 

range01 <- function(x){(x-min(x))/(max(x)-min(x))} 

range01(s) 

    [1] 0.000000000 0.003338782 0.007572326 0.012192201 0.016055006 0.017161145 
    [7] 0.019949532 0.023839810 0.024421602 0.027197168 0.029889484 0.033039408 
[13] 0.033783376 0.038051265 0.045183382 0.049560233 0.056941611 0.057552543 
[19] 0.062674982 0.066001242 0.066420884 0.067689067 0.069247825 0.069432174 
[25] 0.070136067 0.076340460 0.078709590 0.080393512 0.085591881 0.087540132 
[31] 0.090517295 0.091026499 0.091251213 0.099218526 0.103236344 0.105724733 
[37] 0.107495340 0.113332392 0.116103438 0.124050331 0.125596034 0.126599323 
[43] 0.127154661 0.133392300 0.134258532 0.138253452 0.141933433 0.146748798 
[49] 0.147490227 0.149960293 0.153126478 0.154275371 0.167701855 0.170160948 
[55] 0.180313542 0.181834891 0.182554291 0.189188137 0.193807559 0.195903010 
[61] 0.208902645 0.211308713 0.232942314 0.236135220 0.251950116 0.260816843 
[67] 0.284090255 0.284150541 0.288498370 0.295515143 0.299408623 0.301264703 
[73] 0.306817872 0.307853369 0.324882091 0.353241217 0.366800517 0.389474449 
[79] 0.398838576 0.404266315 0.408936260 0.409198619 0.415165553 0.433960390 
[85] 0.440690262 0.458692639 0.464027428 0.474214070 0.517224262 0.538532221 
[91] 0.544911543 0.559945121 0.585390414 0.647030109 0.694095422 0.708385079 
[97] 0.736486707 0.787250428 0.870874773 1.000000000 

添加...將允許您通過na.rm = T,如果你想省略從計算遺漏值(他們仍然會出現在搜索結果):

range01 <- function(x, ...){(x - min(x, ...))/(max(x, ...) - min(x, ...))} 
+3

真的很挑剔,我會添加設備來刪除NA,比如'function(x,na.rm = FALSE)' – 2011-04-14 15:56:39

+0

這個問題[再次提出](http://stackoverflow.com/a/ 31926163/903061)以及NA。我編輯了這個版本,使它更像Richie所說的一般(或多或少)。 – Gregor 2015-08-10 18:27:57