2016-09-15 4 views
-1

Ich möchte Daten (bestehend aus ID und Proben mit der Anzahl der Arten) spaltenweise durch zufälliges Reduzieren der Summe, die jetzt in jeder Spalte anders ist, auf eine Summe von 100 in jede Spalte. Hier ist ein Beispiel einer Tabelle:Normalisierung von Daten durch Reduzierung der Summe

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 

nur Werte> 0 sollte berücksichtigt werden, da die Artenzahl nicht negativ sein kann. Ich würde mich über Ideen freuen!

+0

Multipliziert mit 100/rowsum? Bitte beschreiben Sie den Algorithmus, den Sie verwenden möchten. – Roland

Antwort

1

Sie haben nicht erklärt, warum es negative Daten geben kann oder wie Sie damit umgehen können. Normalerweise würde ich tun

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) 

aber mit negativen Daten an Ort und Stelle vielleicht

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) 

welche setzt früher neagtive Wert auf 0

+0

Großartig, danke! – Yana

Verwandte Themen