R语言如何实现字符移除、拆分及按周一至周日重排星期数据
实现方法
str_split()拆分后无法得到干净星期值的原因是:原始字符串首尾被方括号[、]包裹,直接按逗号拆分后,首尾元素会残留括号符号,无法直接用于排序。
处理逻辑
- 先清除字符串里的所有方括号,再按逗号拆分得到独立的星期值向量
- 预先定义Monday到Sunday的固定顺序作为排序参照
- 对每个拆分得到的星期向量,按参照顺序重排元素
完整代码(stringr版本,适配tidyverse数据框操作)
library(stringr) # 读入示例列数据 demo_col <- c("[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Sunday,Thursday,Tuesday,Saturday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Monday,Tuesday,Wednesday,Thursday,Friday]", "[Saturday,Monday,Thursday,Tuesday,Friday]") # 固定周顺序参照 week_order <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday") # 批量处理得到排序后的星期列表 sorted_result <- demo_col |> str_remove_all("\\[|\\]") |> # 移除所有方括号 str_split(",") |> # 按逗号拆分 lapply(\(item) item[order(match(item, week_order))]) # 按固定周顺序排序 # 若需要转回原带[]的字符串格式存入数据框,执行以下代码即可 df$processed_col <- sorted_result |> sapply(\(item) paste0("[", paste(item, collapse = ","), "]"))
处理效果
示例中两个乱序值的处理结果:
- 原值
[Monday,Sunday,Thursday,Tuesday,Saturday]→ 排序后[Monday,Tuesday,Thursday,Saturday,Sunday] - 原值
[Saturday,Monday,Thursday,Tuesday,Friday]→ 排序后[Monday,Tuesday,Thursday,Friday,Saturday]
如果不想加载第三方包,用基础R实现逻辑完全一致:
# 基础R实现版本 sorted_result_base <- lapply(gsub("\\[|\\]", "", demo_col), function(str){ week_vec <- unlist(strsplit(str, ",")) week_vec[order(match(week_vec, week_order))] })
内容的提问来源于stack exchange,提问作者Jordan Iatro
相关产品推荐
相关产品推荐

