根据特定行的值重新排序列。

8

我有以下数据存储在数据框中:

  aa bb  cc
1 3 4 5
2 5 4 3
3 7 8 6 
..
100 33 63 55

我需要根据最后一行的值重新排序列。这种转换的结果将是:

  bb  cc  aa
1 4  5  3
2 4  3  5 
3 8  6  7
...
100 63 55 33
2个回答

10
x <- structure(list(aa = c(3L, 5L, 7L, 33L), bb = c(4L, 4L, 8L, 63L),
  cc = c(5L, 3L, 6L, 55L)), .Names = c("aa", "bb", "cc"),
  class = "data.frame", row.names = c("1", "2", "3", "100"))
x[,order(-x[nrow(x),])]

谢谢,能否解释一下 -x[nrow...] 的作用? - learner
3
x[nrow(x),] 返回最后一行... -x[nrow(x),] 则是相反的,因此它按您想要的顺序进行排序。您也可以使用 x[,order(x[nrow(x),],decreasing=TRUE)] ,但我更喜欢打字较少的方法。 :) - Joshua Ulrich

3

在Joshua Ulrich的回答基础上,如果你想按行名称而不是数字进行排序:

x[, order(-x[which(rownames(x) == '100'), ]) ]

其中 100 是行名,如上面的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接