Нормализовать строки матрицы в диапазоне 0 и 1

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

`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

`

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

Большое спасибо за вашу помощь заранее!:)

Ответы

Ответ 1

Чтобы нормализовать для каждой строки, вы можете использовать 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))
}

для каждой строки вашего фрейма данных.

Ответ 2

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

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

}

Нормализованная матрица будет обновлена ​​в mydata​​p >

Ответ 3

Вы можете использовать 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) }