r - 如何按多列对数据框进行排序,每列的方向不同?
问题描述
我想在一列上按 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 实现,但很想知道如何做到这一点
解决方案
我们可以将 的值设置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
推荐阅读
- javascript - 想通过在一行的 td 中添加事件监听器来调用 javascript 函数
- c++ - 使用 Tensorflow Lite C,数字分类器
- sql - CTE获取每个父母的所有孩子和嵌套孩子
- javascript - 是否可以在 nuxt static 中启用 gzip 压缩?
- npm - 如何在 m1 上使用 chromedriver err 解决 npm install
- linux - 使用 linux command/srcipting 在 HTML 的特定单词之后提取单词
- telegram-bot - CallbackQueryHandler 或 ConversationHandler 用于从机器人类发送的消息
- html - Angular如何遍历组件类文件数组并渲染它们的模板
- c# - 使用具有指定列的 OpenXml 在 Excel 中插入新行
- python - 如何仅在scrapy spider中每个http请求成功后才执行方法?