【问题标题】:R- Normalizing certain columns from 0 to 1 with values equal to 0R- 将某些列从 0 标准化为 1,其值等于 0
【发布时间】:2018-07-25 23:45:04
【问题描述】:

我最近开始使用 are,我想扩展我的数据矩阵。我在这里找到了一种方法Scale a series between two points

x <- data.frame(step = c(1,2,3,4,5,6,7,8,9,10))
normalized <- (x-min(x))/(max(x)-min(x))

由于我的数据由几列组成,因此我只想使用函数对某些列进行规范化。

normalized <- function(x) (x- min(x))/(max(x) - min(x))
x[] <- lapply(x, normalized) 

此外,我意识到我的数据集中的一些数据点等于 0,因此所提供的公式不再适用。我在这里添加了一个建议的扩展:scaling r dataframe to 0-1 with NA values

normalized <- function(x, ...) {(x - min(x, ...)) / (max(x, ...) - min(x, ...))}

但我不明白我必须如何编码。例如,我希望将第 4、5、6 和 10 列标准化,但我希望将其余列保留在数据集中? 我试过第 4 列:

data <- lapply(data[,4],normalized,na.rm= TRUE)

但它不起作用(而不是数据框,而是一个列表:-(...),有人知道我该如何解决它吗?

非常感谢!

【问题讨论】:

  • 您想要的输出到底是什么?请将此添加到您的问题中。
  • data[, c(4, 5, 6, 10)] &lt;- lapply(data[, c(4, 5, 6, 10)], normalized)?
  • 非常感谢!!它有效,实际上超级简单!但我是个新手:-D

标签: r normalization


【解决方案1】:

试试这个,我已经修改了normalized 函数考虑NA 值:

db<-data.frame(a=c(22,33,28,51,25,39,54,NA,50,66),
               b=c(22,33,NA,51,25,39,54,NA,50,66))

normalized<-function(y) {

  x<-y[!is.na(y)]

  x<-(x - min(x)) / (max(x) - min(x))

  y[!is.na(y)]<-x

  return(y)
  }

 apply(db[,c(1,2)],2,normalized)

你的输出:

               a          b
 [1,] 0.00000000 0.00000000
 [2,] 0.25000000 0.25000000
 [3,] 0.13636364         NA
 [4,] 0.65909091 0.65909091
 [5,] 0.06818182 0.06818182
 [6,] 0.38636364 0.38636364
 [7,] 0.72727273 0.72727273
 [8,]         NA         NA
 [9,] 0.63636364 0.63636364
[10,] 1.00000000 1.00000000

【讨论】:

  • 函数不需要修改,normalized &lt;- function(x, ...) {(x - min(x, ...)) / (max(x, ...) - min(x, ...))}在将na.rm=TRUE作为参数时完美处理NA。 (另外,apply 将转换为矩阵)
猜你喜欢
  • 2017-11-26
  • 2019-05-07
  • 2012-05-09
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
相关资源
最近更新 更多