2013-11-18 1 views
14

Я пытаюсь нормализовать все строки моих матричных данных сразу в пределах диапазона 0 и 1. Но я не знаю, как это сделать. Например, я хочу для нормализации каждого «obs1», «obs2», «obs3». Таким образом, будут использоваться минимум, максимум и сумма каждого «obs1», «obs2», «obs3». Мой формат данных,Нормализовать строки матрицы в пределах диапазона 0 и 1

`MYDATA

   a  b  c   d   e 
obs1 8.15609 11.5379 11.1401 8.95186 7.95722 
obs2 339.89800 856.3470 691.3490 590.28600 543.67200 
obs3 2.12776 46.4561 136.8860 118.09100 119.86400 

`

Кроме того, когда я искал, чтобы выполнить это, люди использовали "функция()". Когда/для чего это используется?

Благодарим вас за помощь! :)

+2

Скорее нестатистическое использование слова «нормализовать». Это преобразование не имеет ничего общего с нормальным распределением (и не имеет никакого отношения к какому-либо из значений, перечисленных в Википедии). Фраза, которая может быть более точной, будет «привязкой единиц измерения» или «шкалой к единичному интервалу». –

ответ

21

Для нормализации для каждой строки, вы можете использовать apply, а затем вычесть минимум из каждого столбца и разделить на разницу между максимумом и минимумом:

t(apply(mydata, 1, function(x)(x-min(x))/(max(x)-min(x)))) 

дает вам

   a   b   c   d   e 
obs1 0.05553973 1.0000000 0.8889038 0.2777796 0.0000000 
obs2 0.00000000 1.0000000 0.6805144 0.4848262 0.3945675 
obs3 0.00000000 0.3289472 1.0000000 0.8605280 0.8736849 

Что происходит, так это то, что вы применяете функцию

function(x){ 
    (x-min(x))/(max(x)-min(x)) 
} 

к eac h строки вашего фрейма данных.

+0

Чрезвычайно больно. Кажется, что вы изменили значение от «2» до «1» в функции. Это очень помогает :) – user2928318

+0

«1» - это аргумент «MARGIN». Посмотрите на '? Apply' для объяснения. – user1981275

0
for(i in 2:length(mydata[1,])){ 

    mydata[,i] <- prop.table(mydata[,i]) 

} 

Нормированная матрица будет обновляться в MyData

0

Вы можете использовать apply с rescale как:

apply(mydata, 1, rescale)

где второй аргумент 1 говорит применить для работы со строками.

По умолчанию диапазон [0, 1], но пользовательский диапазон может быть определен с to аргументом, который будет направлен на функцию rescale:

apply(mydata, 1, rescale, to=c(1,2))

зависимые пакеты:

if(!require(scales)){ install.packages("scales", dependencies=TRUE) library(scales) }

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

  • Нет связанных вопросов^_^