2017-06-15 67 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” - 5.基于这算我需要安排在递减顺序和输出列应类似于以下内容:根据值的计数排列列表

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

您可以使用colSums计数高于阈值,并使用order获得列的基础上,计数顺序:

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

Thankyou ...你能告诉我在命令开始时是1还是在命令结束时+1? – raju

+0

开头的1是在结果中包含第一列,因为在排列列时它已经被删除;最后的+1是将订单向右移一位,以便他们能够选取正确的列。 – Psidom