2017-02-15 55 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