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

R语言散点图生成代码优化:选日期自动识别星期 无需手动指定i向量

优化实现方案

核心逻辑是将星期匹配、均值/标准差计算逻辑移入绘图函数内部,通过lubridate的日期工具自动识别输入日期对应的星期,无需手动指定i向量。

完整优化后代码

library(dplyr)
library(ggplot2)
library(tidyr)
library(lubridate)
library(readxl) # 补充读取Excel文件的依赖包

# 数据读取与预处理
df <- read_excel('C:/Users/Downloads/database_test1.xlsx')
df <- subset(df, df$date2 < df$date1) 

dim_data <- dim(df)
day <- seq.Date(from = as.Date(df$date2[1]),
                to = as.Date(df$date2[dim_data[1]]),
                by = "1 day")

df_grouped <- df %>%
  mutate(across(starts_with("date"), as.Date)) %>% 
  group_by(date2) %>% 
  summarise(Id = first(Id),
            date1 = first(date1),
            Week = first(Week),
            D = first(D),
            D1 = sum(D1)) %>% 
  select(Id, date1, date2, Week, D, D1)

# 提前筛选D为空的样本,固定逻辑无需每次调用重复计算
df_OC <- subset(df_grouped, is.na(D)) 

# 绘图函数,输入目标日期即可自动计算对应星期的参考线
scatter_date <- function(dt, dta = df) {
  # 1. 自动识别输入日期对应的英文星期全称,强制指定英文locale避免系统语言差异问题
  target_week <- as.character(wday(ymd(dt), label = TRUE, abbr = FALSE, locale = "en_US.UTF-8"))
  
  # 2. 筛选对应星期的样本,动态计算均值和标准差
  ds_OC <- subset(df_OC, Week == target_week)
  mean_Week <- mean(as.numeric(ds_OC$D1))
  sdeviation_Week <- sd(as.numeric(ds_OC$D1))
  
  # 3. 绘制散点图+参考线
  dta %>%
    filter(date2 == ymd(dt)) %>%
    summarize(across(starts_with("DR"), sum)) %>%
    pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>%
    mutate(name = as.numeric(name)) %>%
    plot(xlab = "Days", ylab = "Types", xlim = c(0, 7),
         ylim = c((min(.$val) %/% 10) * 10, (max(.$val) %/% 10 + 1) * 15))
  abline(h = mean_Week, col = 'blue') 
  abline(h = mean_Week + sdeviation_Week, col = 'green', lty = 2) 
  abline(h = mean_Week - sdeviation_Week, col = 'orange', lty = 2)
}  

# 测试调用,无需手动设置i值
scatter_date("2021-04-10", df)

优化说明

  • 移除了原代码中手动定义的i向量、全局均值/标准差计算逻辑,改为在每次调用绘图函数时动态计算
  • 使用wday()函数自动识别输入日期的星期名称,直接匹配数据集Week字段筛选样本,无需人工干预
  • 测试场景:输入日期2021-04-10时,wday()会自动返回Saturday,匹配原代码i=3的筛选效果,输出完全一致的散点图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:39:03