2016-09-15 60 views
-1

我想通過隨機地減少現在在每列中不同的總和來逐列地將數據(包括ID和具有物種數的樣本)逐列地歸一化,以達到總和100每列。下面是一個表的例子:通過減少總和來標準化數據

ID S1 S2 S3 
1 1 0 0 3 
2 2 0 0 0 
3 3 5377 6140 7668 
4 4 288 416 1121 
5 5 876 786 1979 
6 6 407 522 3792 

只有值> 0,應考慮到,作爲種類數不能爲負。我會很感激任何想法!

+0

乘?請描述您想使用的算法。 – Roland

回答

1

你沒有解釋爲什麼會有負面數據或如何處理它們。通常我會在適當位置做

expl <- data.frame(ID = 1:6, 
        S1 = c(0,0,5377,288,876,407), 
        S2 = c(0,0,6140,416,786,522), 
        S3 = c(3,0,7668,1121,1979,3792)) 

norm.expl <- apply(expl,2, function(row) row/sum(row)*100) 

print(norm.expl) 

但負面數據可能

expl <- data.frame(ID = 1:6, 
        S1 = c(0,0,5377,288,876,407), 
        S2 = c(0,0,6140,416,786,522), 
        S3 = c(3,0,7668,1121,1979,3792), 
        S4 = c(-1,-2,-3,100,0,100)) 

norm.expl2 <- apply(expl,2,function(row) {row <- row * (row>0); row/sum(row)*100}) 
print(norm.expl2) 

它由100/rowsum將以前neagtive值0

+0

太好了,謝謝! – Yana