2017-06-15 10 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 

値のカウント=> 0.3に基づいて列を並べ替える必要があります。たとえば、: "Name2"列には、> 0.3の値が3であることがわかります。 "Name5" - 2、 "Name4" - 4、 "Name8" - 1、 "Name1"私がオーダーし、出力を下げるの列は次のようになります配置する必要がある。この数:値のカウントに基づいて列を配置する

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

これはDeja Vu! – Sotos

+0

いいえ、それは列を注文していません。そこには値の順序があります。私の入力と出力をはっきりとチェックするだけです。 – raju

答えて

3

あなたが閾値以上の値をカウントし、カウント数に基づいて、列の順序を取得するためにorderを使用するcolSumsを使用することができます。

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

ありがとうございます...コマンドの開始時に1、コマンドの最後に+1を教えてください。 – raju

+0

最初の1は結果に最初の列を含めることです。これは、列のランク付け時に削除されたためです。最後の+1は、正しい列を拾うように、順序を右に1つシフトすることです。 – Psidom

関連する問題