如何基于另一数据框OL的排序规则重排列表lst内的各df
原代码存在两个核心错误:
- 迭代过程中直接调用
OL$Order会取出规则表的整列值,无法和当前处理的df匹配对应的排序规则 arrange()默认不会将字符串参数识别为数据框的列名,需要做符号转换才能正常生效
实现方案
前提说明
默认你的规则表OL结构符合如下逻辑:
Data列存储列表lst中需要排序的df对应的名称Order列存储对应df要使用的排序字段规则
单字段排序实现
如果每个df仅按单个字段排序,使用map2同步迭代目标df和对应排序规则即可:
library(tidyverse) # 提取一一配对的目标df集合和对应的排序规则 target_dfs <- lst[OL$Data] sort_cols <- OL$Order # 用sym()将字符串格式的列名转为dplyr可识别的符号对象 lst[OL$Data] <- map2(target_dfs, sort_cols, ~ .x %>% arrange(!!sym(.y)))
多字段/升降序混合实现
如果OL$Order中存储了多列排序规则(例如"colA,desc(colB)"),可以用表达式解析实现适配:
lst[OL$Data] <- map2(target_dfs, sort_cols, ~ .x %>% arrange(!!!parse_exprs(.y)))
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

