我想在第一列上按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实现,但对如何做到这一点感到好奇
答案 0 :(得分:1)
我们可以将value
的值设置为负值以颠倒该顺序:
smallData[order(smallData$name, -smallData$value),]
或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
答案 1 :(得分:-1)
不确定这是否是您的意思,但是您可以通过以下方式使用order
:
names <- c("paul", "mark", "dave", "will", "john")
values <- c(1,4,1,2,1)
smallData <- data.frame(name = names, value = values)
index <- order(smallData$name)
smallData <- smallData[index,]
index <- order(smallData$value)
smallData <- smallData[index,]
哪个输出:
> smallData name value 3 dave 1 5 john 1 1 paul 1 4 will 2 2 mark 4