如何对R语言中以group_日期命名的list元素按分组、日期先后排序
R语言命名list按规则排序实现
你之前直接使用order未得到预期结果,是因为直接对元素名称按字符串整体排序,会优先比较分组字段,同分组下才会比较日期,和你给出的预期输出逻辑不符。按以下步骤实现即可:
完整代码
# 替换为你自己的原始list变量名 my_list <- list(`groupA_2024-02-01` = structure(list(name = "groupA"), class = "colDef"), `groupB_2024-02-01` = structure(list(name = "groupB"), class = "colDef"), `groupA_2022-04-01` = structure(list(name = "groupA"), class = "colDef"), `groupB_2022-04-01` = structure(list(name = "groupB"), class = "colDef"), `groupA_2021-09-01` = structure(list(name = "groupA"), class = "colDef"), `groupB_2021-09-01` = structure(list(name = "groupB"), class = "colDef"), `groupA_2024-04-01` = structure(list(name = "groupA"), class = "colDef"), `groupB_2024-04-01` = structure(list(name = "groupB"), class = "colDef"), `groupA_2023-02-01` = structure(list(name = "groupA"), class = "colDef"), `groupB_2023-02-01` = structure(list(name = "groupB"), class = "colDef")) # 1. 拆分元素名称提取排序依据字段 name_parts <- strsplit(names(my_list), "_") group <- sapply(name_parts, `[`, 1) date <- as.Date(sapply(name_parts, `[`, 2)) # 2. 生成排序索引 # 适配你给出的预期输出:先按日期升序,同日期下groupA排在groupB前 sort_idx <- order(date, group) # 如果你需要第一优先级为分组、第二优先级为日期,替换为下行代码即可 # sort_idx <- order(group, date) # 3. 重排得到最终结果 sorted_list <- my_list[sort_idx]
结果验证
执行后打印names(sorted_list)即可看到排序后的元素名称,和你给出的预期输出完全匹配。
内容的提问来源于stack exchange,提问作者Priit Mets
相关产品推荐
相关产品推荐

