在R中按组归一化

时间:2017-03-17 15:38:41

标签: r dplyr scale normalize

我试图在R中按组规范化数据帧。我这样做的原因是因为我想在每个组上运行回归方程以获得收入并希望获得斜率。由于数据不是正态分布的,因此我希望按组对数据集进行标准化,以便更好地了解趋势。

我用来规范化数据集的函数如下:

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

我知道R中还有另一个已构建的函数scale

我的数据名称如下所示:

df 
         Date    Partner    Revenue 
1  2017-03-01          A      33121
2  2017-03-02          A      32758
3  2017-03-03          A      34675
4  2017-03-04          A      32407
5  2017-03-05          A      30851
6  2017-03-06          A      33248
7  2017-03-07          A      34288
8  2017-03-08          A      33820
9  2017-03-09          A      36021
10 2017-03-10          A      38757
11 2017-03-11          A      41149
12 2017-03-12          A      36203
13 2017-03-13          A      41167
14 2017-03-14          A      50237
15 2017-03-15          A      48463
16 2017-03-01          B       2123
17 2017-03-02          B       1684
18 2017-03-03          B       1246
19 2017-03-04          B       1099
20 2017-03-05          B       2314
21 2017-03-06          B       1565
22 2017-03-07          B       1610
23 2017-03-08          B       1749
24 2017-03-09          B       1917
25 2017-03-10          B       1784
26 2017-03-11          B       1662
27 2017-03-12          B       1748
28 2017-03-13          B       1452
29 2017-03-14          B        880
30 2017-03-15          B        591

使用normalize函数我尝试了这条路线,但NEWREV数字不在0和1之间。相反,它们的范围是-30,000到-590。

scaled_data <- 
  df %>%
  group_by(`Partner`) %>%
  mutate(NEWREV = normalize(Revenue))

我如何按组扩展收入,以便数字介于0和1之间?

1 个答案:

答案 0 :(得分:1)

看起来你在函数normalize的定义中缺少一些括号:

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