2017-04-24 79 views
0

我有一個數據幀如下:正常化中的R 0-5

A  B   C 
ab  gb  0.03 
fn  mn  0.12 
po  er  0.43 
oo  et  0.22 
iu  ew  0.77 
ii  mn  0.14 
dd  wr  0.99 
qw  ty  0.45 

我怎樣正常化列C是從0-5的範圍內。我知道你可以用dplyr這樣做,但它不會將它轉換爲0-5。

normalize <- function(x){ 
    return((x-min(x))/(max(x)-min(x))) 
} 

scaled_data <- 
    df %>% 
    group_by(A, B) %>% 
    mutate(NORMALIZED = normalize(C)) 
+0

你可以用''dplyr' DF1%>%變異做(C = 5 * C/MAX(C))'' – akrun

+1

鱗::重新調整()' – hrbrmstr

+0

什麼是「你可以不喜歡它這與dplyr,但它不會將其轉換爲0-5「是什麼意思?你說既可以,也不可以那樣做,那麼你想說什麼?也許你正在試圖說,你知道如何使用dplyr做相當於所顯示的內容,但這不符合你的想法。但即使你明確表示,爲什麼要提及呢? – philipxy

回答

0

以下是使用scales::rescaledplyr的方法。我會給你添加group_by

df <-read.table(text=" A  B   C 
ab  gb  0.03 
fn  mn  0.12 
po  er  0.43 
oo  et  0.22 
iu  ew  0.77 
ii  mn  0.14 
dd  wr  0.99 
qw  ty  0.45",header=TRUE,stringsAsFactors=FALSE) 

df%>% 
mutate(C=scales::rescale(C,to=c(0, 5))) 

    A B  C 
1 ab gb 0.000000 
2 fn mn 0.468750 
3 po er 2.083333 
4 oo et 0.989583 
5 iu ew 3.854167 
6 ii mn 0.572917 
7 dd wr 5.000000 
8 qw ty 2.187500