【问题标题】:Normalization in R 0 to 5R 0 到 5 中的归一化
【发布时间】:2017-09-21 12:37:19
【问题描述】:

我有一个如下的数据框:

  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))

【问题讨论】:

  • 您可以使用dplyr df1 %&gt;% mutate(C = 5*C/max(C))
  • scales::rescale()
  • “你可以用 dplyr 做到这一点,但它不能将它转换为 0-5”是什么意思?你说你可以,你不能那样做,那你想说什么?也许您想说,您知道如何使用 dplyr 来完成与所示内容相同的操作,但这并不能满足您的要求。但即使你说清楚了,为什么要提这个?

标签: r dplyr normalization normalize


【解决方案1】:

以下是使用dplyr 使用scales::rescale 的方法。我会留给你添加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

【讨论】: