2017-02-15 72 views
1

Hy guys,使用R標準化

我有一個包含1.350.000行和113列(樣本)的表。 我想要的是用最小的樣本對所有數據進行歸一化。

例如:

Org samp1 samp2 samp3 samp4 samp5 samp6 
A 0.08 4.92 3.34 5.50 2.98 2.99 
B 1.97 3.96 4.49 2.79 4.73 4.00 
C 4.05 3.99 4.89 3.72 3.83 5.17 
D 1.70 5.11 3.97 3.37 2.71 3.22 

和它們相應的總和。

Sum 7.80 17.98 16.69 15.38 14.26 15.37 

這是預期的表百分比:

Org samp1 samp2 samp3 samp4 samp5 samp6 
A 0.01 0.27 0.20 0.36 0.21 0.19 
B 0.25 0.22 0.27 0.18 0.33 0.26 
C 0.52 0.22 0.29 0.24 0.27 0.34 
D 0.22 0.28 0.24 0.22 0.19 0.21 

這是最後的表:

Org samp1 samp2 samp3 samp4 samp5 samp6 
A 0.08 2.14 1.56 2.79 1.63 1.52 
B 1.97 1.72 2.10 1.42 2.59 2.03 
C 4.05 1.73 2.29 1.89 2.10 2.62 
D 1.70 2.22 1.85 1.71 1.48 1.63 

考慮最小總和值(SAMP1 = 7.80)。這是我想用來規範所有樣本中所有值的數字。 我知道理論,第一步是計算列中每個值的百分比,然後乘以最小值。

謝謝你的幫助。

+0

通過規範化,你的意思是你想所有的結果列的總和是相同的? –

+0

我的意思是使用最小列總和的值。 –

回答

1

您可以使用此:

生成數據

str <- 'Org samp1 samp2 samp3 samp4 samp5 samp6 
A 0.08 4.92 3.34 5.50 2.98 2.99 
B 1.97 3.96 4.49 2.79 4.73 4.00 
C 4.05 3.99 4.89 3.72 3.83 5.17 
D 1.70 5.11 3.97 3.37 2.71 3.22' 



file <- textConnection(str) 
df <- read.table(file, header = T) 

得到正規化和值

step1 <- colSums(df[,-1]) 

step1/min(step1) 

編輯:

重現你的榜樣結果:

step1 <- colSums(df[,-1]) 

round(df[,-1]/rep(step1,each=nrow(df)),2) 

    samp1 samp2 samp3 samp4 samp5 samp6 
1 0.01 0.27 0.20 0.36 0.21 0.19 
2 0.25 0.22 0.27 0.18 0.33 0.26 
3 0.52 0.22 0.29 0.24 0.27 0.34 
4 0.22 0.28 0.24 0.22 0.19 0.21 

round(df[,-1]/rep(step1,each=nrow(df)) * min(step1),2) 

    samp1 samp2 samp3 samp4 samp5 samp6 
1 0.08 2.13 1.56 2.79 1.63 1.52 
2 1.97 1.72 2.10 1.41 2.59 2.03 
3 4.05 1.73 2.29 1.89 2.10 2.62 
4 1.70 2.22 1.86 1.71 1.48 1.63