2017-01-17 2 views
1

Je voudrais normaliser les valeurs dans les lignes d'une trame de données. En d'autres termes, divisez chaque ligne d'une colonne donnée par un rapport calculé à partir de la somme de toutes les lignes d'une colonne donnée et de la somme la plus basse des lignes. Voici mon exemple:Normalisation des données dans les lignes de R

df <- data.frame(x = 5:1, y = 2:6, z = 11:25) 

trouver une colonne avec la plus petite somme

sum(df$x) 
sum(df$y) 
sum(df$z) 

obtenir des valeurs normalisées

df$x_norm <- df$x/(sum(df$x)/sum(df$x)) 
df$y_norm <- df$y/(sum(df$y)/sum(df$x)) 
df$z_norm <- df$z/(sum(df$z)/sum(df$x)) 

Répondre

2

Au lieu de répéter l'opération pour chaque colonne séparément, nous pouvons le faire d'une manière plus rapide en obtenant la somme de la colonne (colSums), la diviser par le minimum de 'v1', et enfin diviser l'ensemble de données par 'v2' pour créer les nouvelles colonnes

v1 <- colSums(df) 
v2 <- v1/min(v1) 
df[paste0(names(df), "_norm")] <- t(t(df)/v2)