2017-01-17 52 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)