R语言如何根据输入日期自动匹配对应星期均值绘制图表水平线
解决方案
核心思路
不要把各星期均值存为独立的变量,改用键为星期标识的命名结构存储,通过输入日期提取的星期信息动态索引对应均值,无需手动修改参数。
实现步骤
- 整理星期均值为命名列表
把原本分散的mean_monday、mean_saturday等独立变量整合为命名列表,键的格式和后续提取的星期格式保持一致即可,也可以直接从原始数据集分组计算生成,效率更高:
# 方式1:手动把已计算好的均值整合为列表 week_mean <- list( "Monday" = mean_monday, "Tuesday" = mean_tuesday, "Wednesday" = mean_wednesday, "Thursday" = mean_thursday, "Friday" = mean_friday, "Saturday" = mean_saturday, "Sunday" = mean_sunday ) # 方式2:直接从原始数据集分组计算生成,无需单独计算各天均值 library(dplyr) week_mean <- 原始数据集 %>% mutate(weekday = weekdays(date2)) %>% group_by(weekday) %>% summarise(avg_val = mean(你要绘制的数值字段, na.rm = TRUE)) %>% tibble::deframe() # 直接转为命名列表
- 输入指定日期,自动提取所属星期
# 输入自定义日期 input_date <- as.Date("2021-04-10") # 提取该日期对应的星期名称,和上一步的列表键格式保持一致 input_weekday <- weekdays(input_date) # 如果习惯用数值编码对应星期,可以用lubridate的wday函数,和均值计算时的编码规则一致即可 # library(lubridate) # input_weekday <- wday(input_date, week_start = 1) # week_start=1表示周一为一周起始
- 动态调用均值绘制水平线
把原本固定的abline参数替换为动态取值即可:
# 先做简单校验,避免索引不到报错 if(!input_weekday %in% names(week_mean)){ stop("输入日期对应的星期不存在于统计数据中") } # 动态获取对应星期的均值 target_mean <- week_mean[[input_weekday]] # 绘制水平线,无需手动修改参数 abline(h = target_mean, col = "red", lwd = 2)
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

