我有以下数据框(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/