2017-06-15 4 views
0
Input: 

Sample Name2 Name5 Name4 Name8 Name1 group 
ERT 0.111 0.389 0.378  0  1  HJ 
KLJ  0  0.167  1  0.875 0.389  HJ 
FGT 0.867 0.4345 0.4  0  0.487  KO 
SDF 0.99234  0  0.98 0.007 0.786  KO 
JHU 0.3347  0  0  0  1  FR 

Ich muss die Spalten auf der Grundlage der Anzahl der Werte> = 0,3 bestellen. Zum Beispiel: In der Spalte "Name2" sehe ich die Anzahl der Werte> = 0,3 sind 3. Für andere Spalten "Name5" - 2, "Name4" - 4, "Name8" - 1, "Name1" - 5. Basiert auf aussehen wie im Anschluss an dieser Zählung ich brauche sollte die Spalten in absteigender Reihenfolge und Ausgang zu ordnen:Ordnen Sie die Spalten basierend auf der Anzahl der Werte an

Output: 

Sample Name8 Name5 Name2 Name4  Name1 group 
ERT  0  0.389 0.111 0.378  1  HJ 
KLJ 0.875  0.167  0  1  0.389  HJ 
FGT  0  0.4345 0.867  0.4  0.487  KO 
SDF 0.007  0  0.99234 0.98  0.786  KO 
JHU  0  0  0.3347 0   1  FR 
+2

Das ist wie Deja Vu! – Sotos

+0

Nein, es ist nicht die Reihenfolge der Spalten. Da bestellt er Werte. Überprüfen Sie einfach meine Eingabe und Ausgabe deutlich. – raju

Antwort

3

Sie colSums verwenden können Werte über einem Schwellenwert zu zählen und verwenden order die Reihenfolge der Spalten zu erhalten, basierend auf der Zählung:

df[c(1, order(colSums(df[-1] >= 0.3)) + 1)] 

# Sample Name8 Name5 Name2 Name4 Name1 
#1 ERT 0.000 0.3890 0.11100 0.378 1.000 
#2 KLJ 0.875 0.1670 0.00000 1.000 0.389 
#3 FGT 0.000 0.4345 0.86700 0.400 0.487 
#4 SDF 0.007 0.0000 0.99234 0.980 0.786 
#5 JHU 0.000 0.0000 0.33470 0.000 1.000 
+0

Danke ... Könnten Sie mir bitte sagen, was ist 1 am Anfang des Befehls und +1 am Ende des Befehls? – raju

+0

Die 1 am Anfang ist, die erste Spalte in das Ergebnis aufzunehmen, da es beim Rang der Spalten gelöscht wurde; Die +1 am Ende soll die Reihenfolge um eins nach rechts verschieben, so dass sie die richtigen Spalten aufnehmen. – Psidom

Verwandte Themen