列值的标准化+使用标准化值创建新列

时间:2014-01-30 02:28:54

标签: r

我试图学习如何规范化R中数据集/框架中给定列中的值,并在新创建的列中输入这些规范化值。

我能够找到两个代码 - 一个帮助我规范化值的代码,另一个代码帮助我创建了一个列。

但是,我无法做的是在新创建的列中输入规范化值。

我正在玩数据集Indometh(内置于R中)。我想创建一个ConcNorm列,它将具有Indometh中已存在的Conc列的标准化值(介于0和1之间)。

有人可以帮我解决这个问题吗?

Indometh["Concnorm"] <- NA

normalize <- function(Indometh) { 
    Indometh <- sweep(Indometh, 2, apply(Indometh, 2, min)) 
    sweep(Indometh, 2, apply(Indometh, 2, max), "/") 
}

UPDATE:myNorm = function (x) {(x- min(Indometh$conc)) / (max(Indometh$conc)-min(Indometh$conc))} MyNorm(0.05) myNorm(2.7)

我提出的另一个代码看起来像:

以上是我在网上进行研究,但这不起作用/服务于此目的。

感谢所有帮助。

2 个答案:

答案 0 :(得分:0)

此函数接收data.frame对象以及原始列和新列的名称:

  normalize.col = function(data, orig.col, new.col) {

   val.range = range(data[, orig.col])
   data[, new.col] = (data[, orig.col] - val.range[1])/(val.range[2] - val.range[1])

   data
}

示例(您也可以传递多个列):

Indometh_norm = normalize.col(Indometh, 'conc', 'normConc')

答案 1 :(得分:0)

我错过了什么吗?

df <- Indometh
df$scaledConc <- with(df, (conc - min(conc))/diff(range(conc)))
range(df$scaledConc)
# [1] 0 1

通常,混淆内置数据集是个坏主意。这就是我首先复制到df

的原因