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

使用R dplyr将月度日期分类为带序号的Mon/Weekdays/Fri/Weekend因子

实现代码

你可以通过dplyr+lubridate组合实现需求,完整代码如下:

# 加载依赖包
library(dplyr)
library(lubridate)

# 你原有的样本生成代码
sample_dates <- data.frame(date = c("2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05", "2021-01-06", "2021-01-07", "2021-01-08", "2021-01-09", "2021-01-10", "2021-01-11", "2021-01-12", "2021-01-13", "2021-01-14", "2021-01-15", "2021-01-16", "2021-01-17", "2021-01-18", "2021-01-19", "2021-01-20", "2021-01-21", "2021-01-22", "2021-01-23", "2021-01-24", "2021-01-25", "2021-01-26", "2021-01-27", "2021-01-28", "2021-01-29", "2021-01-30", "2021-01-31"))

sample_dates <- sample_dates %>% 
  mutate(date = as.POSIXct(date)) %>% 
  mutate(day = factor(format(date, "%a")))

# 新增day_cat变量的核心逻辑
sample_dates <- sample_dates %>%
  mutate(
    # 提取星期数值:1=周日、2=周一、3=周二、4=周三、5=周四、6=周五、7=周六
    weekday_num = wday(date),
    # 定义基础分类
    base_cat = case_when(
      weekday_num == 2 ~ "Mon",
      weekday_num %in% c(3,4,5) ~ "Weekdays",
      weekday_num == 6 ~ "Fri",
      weekday_num %in% c(1,7) ~ "Weekend"
    ),
    # 计算周期序号:每遇到一次周一序号+1,月初非周一开头的部分统一归为第1周期
    cycle_num = cumsum(weekday_num == 2) + 1,
    cycle_num = if_else(row_number() == 1 & weekday_num != 2, 1, cycle_num),
    # 拼接得到day_cat
    day_cat = paste0(base_cat, cycle_num),
    # 按要求设置因子水平,满足绘图排序需求
    day_cat = factor(
      day_cat, 
      levels = c(
        paste0("Mon", sort(unique(cycle_num))),
        paste0("Weekdays", sort(unique(cycle_num))),
        paste0("Fri", sort(unique(cycle_num))),
        paste0("Weekend", sort(unique(cycle_num)))
      )
    )
  )

效果验证

以你提供的2021年1月样本为例,生成的day_cat前10条结果完全符合预期:

datedayday_cat
2021-01-01FriFri1
2021-01-02SatWeekend1
2021-01-03SunWeekend1
2021-01-04MonMon2
2021-01-05TueWeekdays2
2021-01-06WedWeekdays2
2021-01-07ThuWeekdays2
2021-01-08FriFri2
2021-01-09SatWeekend2
2021-01-10SunWeekend2

该实现支持任意月份起始/结束日期的场景,自动匹配周期序号,不需要手动指定月初星期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:36:03