You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言使用dplyr生成表格时星期排序错误,如何调整输出顺序

错误原因

你使用match函数做匹配时,传入的参考日期只有2021-11-07(周日)、2021-11-13(周六)两个值,调用weekdays()后得到的参考匹配向量仅有["周日", "周六"]两个元素:

  • 周日匹配后返回值为1,排序第一位
  • 周六匹配后返回值为2,排序第二位
  • 其余周一到周五的星期值在参考向量中不存在,match返回NA,排序时默认排在非NA值之后,所以呈现出你看到的错误顺序。

修正方案

生成从起始日期到结束日期的完整7天日期序列作为匹配参考,即可得到周日到周六的完整排序优先级,修正后的代码如下:

library(dplyr)

Test <- structure(list(date1 = as.Date(c("2021-11-01","2021-11-01","2021-11-01","2021-11-01","2021-11-01","2021-11-01","2021-11-01")),
                      date2 = as.Date(c("2021-10-18","2021-10-19","2021-10-20","2021-10-21","2021-10-22","2021-10-23","2021-10-24")),
                       Week = c("Monday", "Tuesday", "Wednesday", "Thursday","Friday","Saturday","Sunday"),
                      Category = c("FDE", "FDE", "FDE", "FDE","FDE","FDE","FDE"),
                       time = c(4, 6, 3, 2,3,3,4)), class = "data.frame",row.names = c(NA, -7L))

wk_port2eng <- data.frame(
  WeekE = c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"),
  WeekP = c("segunda-feira", "terca-feira", "quarta-feira", "quinta-feira",  "sexta-feira", "sabado", "domingo")
)

# 核心修改:生成完整7天日期序列作为匹配参考
left_join(Test, wk_port2eng, by = c("Week" = "WeekE")) %>%      
  arrange(match(WeekP, weekdays(seq.Date(as.Date("2021-11-07"), as.Date("2021-11-13"), by = "1 day")))) %>%
  select(-WeekP)

运行结果

date1      date2      Week Category time
1 2021-11-01 2021-10-24    Sunday      FDE    4
2 2021-11-01 2021-10-18    Monday      FDE    4
3 2021-11-01 2021-10-19   Tuesday      FDE    6
4 2021-11-01 2021-10-20 Wednesday      FDE    3
5 2021-11-01 2021-10-21  Thursday      FDE    2
6 2021-11-01 2021-10-22    Friday      FDE    3
7 2021-11-01 2021-10-23  Saturday      FDE    3

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:36:03