如何在R语言中高效生成按星期、小时排序的全周时段列表?
高效生成按星期-小时排序的全时段列表
方法1:使用outer函数(最简洁高效)
outer函数可以直接生成两个向量的所有元素组合,配合paste完成拼接,最后转成向量即可得到预期顺序的结果:
weekdays <- c("Mon","Tue","Wed","Thu","Fri","Sat","Sun") hours <- c("12am","1am","2am","3am","4am", "5am","6am","7am","8am","9am","10am", "11am","12pm","1pm","2pm","3pm","4pm","5pm","6pm","7pm","8pm","9pm", "10pm","11pm") weekdaysandhours <- as.vector(outer(weekdays, hours, paste))
outer会遍历weekdays的每个元素,依次和hours的所有元素执行paste操作,生成的矩阵转成向量后,自然就是「周一所有小时→周二所有小时→…→周日所有小时」的顺序。
方法2:使用expand.grid生成组合后处理
如果需要更灵活的后续操作(比如保留数据框格式),可以用expand.grid生成所有组合,再排序拼接:
weekdays <- c("Mon","Tue","Wed","Thu","Fri","Sat","Sun") hours <- c("12am","1am","2am","3am","4am", "5am","6am","7am","8am","9am","10am", "11am","12pm","1pm","2pm","3pm","4pm","5pm","6pm","7pm","8pm","9pm", "10pm","11pm") # 生成所有星期-小时组合的数据框 comb_df <- expand.grid(Weekday = weekdays, Hour = hours, stringsAsFactors = FALSE) # 按原星期顺序排序(修正expand.grid默认的循环顺序) comb_df <- comb_df[order(match(comb_df$Weekday, weekdays)), ] # 拼接成目标向量 weekdaysandhours <- paste(comb_df$Weekday, comb_df$Hour)
这两种方法都避免了手动逐个拼接的冗余代码,当星期或小时列表需要修改时,只需调整原始向量即可,维护性大幅提升。
内容的提问来源于stack exchange,提问作者Chandler T
相关产品推荐
相关产品推荐

