使用 R 规范化
Normalization using R
伙计们,
我有一个 table 有 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
这是预期的 table,百分比为:
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
这是最后的 table:
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)。这是我想用来对所有样本的所有值进行归一化的数字。
我知道这个理论,第一步是计算列中每个值的百分比,然后乘以最小值。
感谢您的帮助。
你可以使用这个:
生成数据
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
伙计们,
我有一个 table 有 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
这是预期的 table,百分比为:
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
这是最后的 table:
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)。这是我想用来对所有样本的所有值进行归一化的数字。 我知道这个理论,第一步是计算列中每个值的百分比,然后乘以最小值。
感谢您的帮助。
你可以使用这个:
生成数据
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