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
相关产品推荐
相关产品推荐

