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.
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.
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.
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, ...))}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With