Dplyr中通过for循环实现多规则排序后输出dataframe的方法
Dplyr 按多规则循环排序实现方案
首先修正原代码的语法错误:summarise行末尾的管道符书写不全,应为%>%。
实现for循环切换排序字段的完整可运行代码如下:
library(dplyr) # 提前完成分组汇总,避免重复计算 base_df <- mtcars %>% dplyr::group_by(gear) %>% dplyr::summarise( sum.total = n(), sum.mpg = sum(mpg) ) # 定义需要遍历的排序字段集合 sort_fields <- c("sum.total", "sum.mpg") # 循环执行排序并输出结果 for (field in sort_fields) { # 动态引用列名完成排序 result <- base_df %>% dplyr::arrange(desc(.data[[field]])) # 按要求格式输出 cat(paste0("# with dplyr::arrange(desc(", field, "))\n")) print(result, row.names = FALSE) cat("\n") }
代码说明
- 使用
.data[[field]]是dplyr动态引用字符串列名的标准写法,避免把字符串识别为固定变量名 - 提前完成分组汇总逻辑,仅在循环内执行排序操作,提升运行效率
运行输出示例
# with dplyr::arrange(desc(sum.total)) gear sum.total sum.mpg 3 15 241.6 4 12 293.3 5 5 106.9 # with dplyr::arrange(desc(sum.mpg)) gear sum.total sum.mpg 4 12 293.3 3 15 241.6 5 5 106.9
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

