2017-01-17 8 views
1

Я хотел бы нормализовать значения в строках фрейма данных. Другими словами, разделите каждую строку в данном столбце на отношение, рассчитанное по сумме всех строк в данном столбце, до наименьшей суммы строк. Вот мой пример:Нормализация данных в строках в R

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

найти столбец с наименьшей суммой

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

получать нормированные значения

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)) 

ответ

2

Вместо того чтобы повторять операцию для каждого столбца в отдельности, мы можем это сделать быстрее, получив суммы столбцов (colSums), разделите их на минимум «v1» и, наконец, разделите набор данных на «v2», чтобы создать новые столбцы

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