我有以下数据框(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)
但是,根据这些排名,我不知道如何重新排序。
有谁知道怎么从这里继续?或者,如果有另一种方法可以完全做到这一点,那就太棒了!
非常感谢!!
答案 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))