R:根据排名重新排列数据帧列

时间:2015-05-29 16:15:57

标签: r

我有以下数据框(df1)

<ns3:

我想重新排序此数据框,使其按降序排列,基于“总计”行。

结果数据框应如下所示(df2)

Type     CA     AR       OR
alpha    2      3        5
beta     1      5        6
gamma    6      2        8
delta    8      1        9
Total    17     11       28

请注意,之前作为“CA,AR或OR”排序的列现在已根据总行(按降序排序)变为“OR,CA,AR”。

为了做到这一点,我试图使用rank函数,如下所示:

    Type     OR    CA     AR       
    alpha     5    2      3        
    beta      6    1      5        
    gamma     8    6      2        
    delta     9    8      1        
    Total     28   17     11

这给了我排名:

rank_total <- rank(-df1)

但是,根据这些排名,我不知道如何重新排序。

有谁知道怎么从这里继续?或者,如果有另一种方法可以完全做到这一点,那就太棒了!

非常感谢!!

1 个答案:

答案 0 :(得分:3)

尝试

 df2 <- df1[,c(1, order(-unlist(df1[df1$Type=='Total',-1]))+1)]
 df2
 #   Type OR CA AR
 #1 alpha  5  2  3
 #2  beta  6  1  5
 #3 gamma  8  6  2
 #4 delta  9  8  1
 #5 Total 28 17 11

或使用rank

 df1[,c(1, match(1:3, rank(-unlist(df1[nrow(df1),-1])))+1)]

数据

 df1 <- structure(list(Type = c("alpha", "beta", "gamma", "delta", "Total"
 ), CA = c(2L, 1L, 6L, 8L, 17L), AR = c(3L, 5L, 2L, 1L, 11L), 
  OR = c(5L, 6L, 8L, 9L, 28L)), .Names = c("Type", "CA", "AR", 
 "OR"), class = "data.frame", row.names = c(NA, -5L))