首页 > 解决方案 > 如何按多列对数据框进行排序,每列的方向不同?

问题描述

我想在一列上按 ASC 顺序排序,在第二列上按 DESC 顺序排序。假设我有这些数据:

names <- c("a", "a", "b", "b", "b")
values <- c(4,1,1,2,4)
smallData <- data.frame(name = names, value = values)
smallData
  name value
2    a     1
3    b     1
4    b     2
1    a     4
5    b     4

我知道我可以smallData像这样订购:

smallData[order(smallData$name),]
smallData[order(smallData$name, decreasing = T),]
smallData[order(smallData$name, smallData$value),]

但是我如何按名称 ASC 排序,然后按值 DESC 排序?输出应如下所示:

  name value
1    a     4
2    a     1
5    b     4
4    b     2
3    b     1

注意:更喜欢基本的 R 实现,但很想知道如何做到这一点

标签: rdataframe

解决方案


我们可以将 的值设置value为负以反转该顺序:

smallData[order(smallData$name, -smallData$value),]

或 with rank,它也适用于字符变量:

smallData[order(smallData$name, -rank(smallData$value)),]

输出:

  name value
1    a     4
2    a     1
5    b     4
4    b     2
3    b     1

推荐阅读