web-dev-qa-db-fra.com

Normaliser les lignes d’une matrice dans la plage et 1

J'essaie de normaliser toutes les lignes de ma matrice en même temps dans les plages 0 et 1. Mais je ne sais pas comment le faire .. Par exemple, je souhaite normaliser chaque "obs1", "obs2", "obs3". Ainsi, minimum, maximum et somme de chaque "obs1", "obs2", "obs3" seront utilisés. Mon format de données est, 

`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

`

En outre, lorsque j'ai cherché à effectuer cette opération, les utilisateurs ont utilisé "function ()". Quand/pour quoi est-ce utilisé?

Merci beaucoup pour votre aide à l'avance! :)

15
user2928318

Pour normaliser chaque ligne, vous pouvez utiliser apply, puis soustraire le minimum de chaque colonne et diviser par la différence entre le maximum et le minimum:

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

vous donne 

              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

Qu'est-ce qui se passe est que vous appliquez la fonction 

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

à chaque ligne de votre cadre de données. 

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

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

}

La matrice normalisée sera mise à jour dans mydata

0
Sushant Kulkarni