2014-01-30 5 views
0

Я пытаюсь узнать, как нормализовать значения в данном столбце в наборе данных/кадре в R и ввести эти нормированные значения во вновь созданный столбец.Нормализация значений столбцов + Создание нового столбца с нормализованными значениями

Мне удалось найти два кода - один, который помог мне нормализовать значения и один, который помог мне создать столбец.

Однако, что мне не удалось сделать, это ввести нормированные значения во вновь созданный столбец.

Я играю с набором данных Indometh (встроенный в R). Я хотел создать столбец ConcNorm, который имел бы нормализованные значения (от 0 до 1) столбца Conc, уже существующие в Indometh.

Не могли бы кто-нибудь помочь, если я обнялся?

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)

Другой код я придумал выглядел как:

выше является то, что я придумал исследования в Интернете, однако это разве работает/служит цели.

Вся помощь приветствуется.

ответ

0

Am I что-то не хватает?

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

Как правило, это плохая идея, связанная со встроенными наборами данных. Вот почему я скопировал сначала df.

+0

спасибо. я не понял ваш ответ хорошо – Freewill

+0

, поэтому я сделал еще несколько чтений, которые помогли мне лучше понять ваш код. Я использовал его, и он, похоже, работал хорошо. Еще раз спасибо. – Freewill

+0

Поскольку вы новичок в SO, [эта ссылка] (http://stackoverflow.com/help/someone-answers) объясняет, что делать, когда кто-то отвечает на ваш вопрос. Соглашение состоит в том, чтобы подождать 24 часа, прежде чем принимать ответ, в случае, если кто-то другой встретится с лучшим. – jlhoward

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') 
+0

привет Спасибо за ваш ответ. Но что такое val.range и что он здесь делает? Будет ли это нормализоваться между 0 и 1? Кроме того, ваш пример не соответствует предоставленному вами универсальному коду. Является ли код, который я предоставил в разделе «Обновить» моего сообщения, какой-либо товар? не могли бы вы расширить это вместо этого? – Freewill

+0

val.range - минимальное/максимальное значение, да, это нормализуется до 0 и 1. Что вы имеете в виду, не соответствует? Он нормализует и добавляет новый столбец. – Fernando

+0

Еще раз спасибо. Я вижу в вашем примере добавлен еще один нормализованный столбец. Но код, который вы предоставили, и код, упомянутый в примере, не похожи друг на друга, - это то, о чем я говорил. Извините, я новичок в R, так что все еще пытаюсь понять некоторые из этих технических проблем. – Freewill

Смежные вопросы