我有以下数据框(df1)

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


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

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

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


请注意,基于总行(以降序排列),以前作为“ CA,AR或OR”排序的列现在已变为“ OR,CA,AR”。

为此,我尝试如下使用rank函数:

rank_total <- rank(-df1)


这给了我排名:

 [1] 2 1 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))

关于r - R:根据排名重新排列数据框的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30534347/

10-10 21:33
查看更多