Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Range standardization (0 to 1) in R [duplicate]

Tags:

r

Possible Duplicate:
scale a series between two points in R

Does any know of an R function to perform range standardization on a vector? I'm looking to transform variables to a scale between 0 and 1, while retaining rank order and the relative size of separation between values.

Just to be clear, i'm not looking to standardize variables by mean centering and scaling by the SD, as is done in the function scale().

I tried the functions mmnorm() and rangenorm() in the package 'dprep', but these don't seem to do the job.

like image 383
Steve Avatar asked Apr 14 '11 15:04

Steve


People also ask

How do I standardize a value in R?

Method 1: Using Scale function. R has a built-in function called scale() for the purpose of standardization. Here, “x” represents the data column/dataset on which you want to apply standardization. “center” parameter takes boolean values, it will subtract the mean from the observation value when it is set to True.

How do you scale numbers in R?

In R, you can use the scale() function to scale the values in a vector, matrix, or data frame. You will almost always receive meaningless results if you do not normalize the vectors or columns you are utilizing. Scale() is a built-in R function that centers and/or scales the columns of a numeric matrix by default.


1 Answers

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 

Adding ... will allow you to pass through na.rm = T if you want to omit missing values from the calculation (they will still be present in the results):

range01 <- function(x, ...){(x - min(x, ...)) / (max(x, ...) - min(x, ...))} 
like image 120
Andrie Avatar answered Sep 20 '22 18:09

Andrie