r - 如何按降序对数据帧进行排序 lapply 并在 r 中排序
问题描述
不确定这是否是重复的,但我找不到任何可以解决我原来的问题或我遇到的部分问题的问题。
目标是按列独立对数据框进行排序。
可重现的例子
a <- data.frame(name = c("a","a","a","b","b","b"),date1 = c(2,3,1,3,1,2),date2 = c(0,2,3,1,2,0),date3 = c(0,2,0,3,2,1))
a
name date1 date2 date3
1 a 2 0 0
2 a 3 2 2
3 a 1 3 0
4 b 3 1 3
5 b 1 2 2
6 b 2 0 1
b <- ddply(a, "name", function(x) { as.data.frame(lapply(x, sort))
b
name date1 date2 date3
1 a 1 0 0
2 a 2 2 0
3 a 3 3 2
4 b 1 0 1
5 b 2 1 2
6 b 3 2 3
现在这按预期工作,但与我想要做的相反。期望的输出
b
name date1 date2 date3
1 a 3 3 2
2 a 2 2 0
3 a 1 0 0
4 b 3 2 3
5 b 2 1 2
6 b 1 0 1
我尝试添加decreasing=T
参数,但对我尝试过的变体没有任何运气,通常最终会出现有关缺少参数或选择未定义列的错误。如何使用这种语法正确实现递减排序和/或以其他方式在不依赖显式命名列的情况下实现最终结果(它们的名称是日期,因此经常更改)
奖金
如何调整此代码以解释 NAna.last
谢谢!
解决方案
我认为您使用代码对 data.frame 行进行了核对,这不是一个很好的实践标准 dplyr 使用这样的排列()函数
library(tidyverse)
a <- data.frame(name = c("a","a","a","b","b","b"),date1 = c(2,3,1,3,1,2),date2 = c(0,2,3,1,2,0),date3 = c(0,2,0,3,2,1))
a %>%
arrange(name,-date1)
如果你想过上危险的生活,这里就是它的代码
a %>%
group_by(name) %>%
mutate_all(sort,decreasing = TRUE)
name date1 date2 date3
<fct> <dbl> <dbl> <dbl>
1 a 3 3 2
2 a 2 2 0
3 a 1 0 0
4 b 3 2 3
5 b 2 1 2
6 b 1 0 1
推荐阅读
- numerical-methods - 实现拉盖尔的求根方法
- java - OpenAPI 不验证字符串数组查询参数值
- python - 添加一个方法,如果当前日期是星期一,我们添加 4 个日期,则要返回的日期是星期五
- python - 从四元数获得相对角速度
- database - Neo4j 基于条件的输出
- python - Selenium 和 Python:使用动态 XPATH 查找元素
- javascript - 从 Websocket 函数中获取值
- debian - 使用 LUKS 接收“此密码没有可用的密钥”
- windows - 批处理:从文件名(子字符串)创建文件夹
- javascript - 在 selectionchange() 上从数组中弹出元素