如何用dplyr对data.frame所有变量进行降序排列?
使用dplyr对data.frame所有变量降序排列的方法
嗨,我来帮你用dplyr搞定这个需求!其实有几种简洁的方式可以实现,而且能保持结果还是data.frame格式(不像sapply返回矩阵),具体如下:
方法1:使用mutate_all(适用于旧版dplyr)
如果你用的是较旧版本的dplyr,可以直接用mutate_all对所有列应用排序函数:
library(dplyr) my_data %>% mutate_all(sort, decreasing = TRUE)
方法2:使用across(dplyr 1.0.0+推荐用法)
从dplyr 1.0.0版本开始,官方更推荐用across函数,它的灵活性更强,能更清晰地指定要操作的列范围:
my_data %>% mutate(across(everything(), ~sort(.x, decreasing = TRUE)))
这里的everything()表示选中所有列,~sort(.x, decreasing = TRUE)是一个匿名函数,对每一列.x执行降序排序。
和sapply的小区别
你之前用sapply(my_data, function(x) sort(x, decreasing = T))得到的是矩阵,而上面的dplyr方法返回的是和原数据结构一致的data.frame,这在后续的数据处理中可能更方便哦。
举个实际例子:
假设你的数据是:
my_data <- data.frame(a = c(3,1,2), b = c(5,2,7))
用上面的dplyr方法处理后,结果会是:
a b 1 3 7 2 2 5 3 1 2
内容的提问来源于stack exchange,提问作者patL
相关产品推荐
相关产品推荐

