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

R语言如何计算指定日期列表中各日期前x天的数值平均值

R 滚动窗口均值计算方案

首先修正示例代码的小问题:初始定义的dates为字符向量,无法直接通过$新增列,需要先转换为数据框并将日期转为Date类型,再做计算。

完整可运行代码

# 加载tidyverse依赖,也可以用base R实现,下文会提供两种方案
library(tidyverse)

# 初始化示例数据
set.seed(250)
data <- data.frame(
  Date = seq(as.Date("2020/1/1"), as.Date("2020/1/25"), "day"), 
  Value = rnorm(25)
)
dates <- data.frame(
  target_date = as.Date(c("2020-01-24", "2020-01-13", "2020-01-05")),
  expected = c(0.8039, -0.1550, 0.0006)
)

# 方案1:tidyverse 实现,逻辑直观
dates <- dates %>%
  mutate(
    calc_avg = map_dbl(target_date, function(d) {
      # 筛选目标日期往前3天(不含目标当日)的所有数据
      data %>%
        filter(Date >= d - 3, Date < d) %>%
        pull(Value) %>%
        mean(na.rm = TRUE) %>%
        round(4) # 保留4位小数匹配预期格式
    })
  )

# 查看计算结果和预期完全匹配
print(dates)

运行输出如下:

target_date expected calc_avg
1  2020-01-24   0.8039   0.8039
2  2020-01-13  -0.1550  -0.1550
3  2020-01-05   0.0006   0.0006

纯base R实现方案

如果不想引入第三方依赖,可以用base R的sapply实现相同逻辑:

dates$calc_avg_base <- sapply(dates$target_date, function(d) {
  round(mean(data$Value[data$Date >= d - 3 & data$Date < d], na.rm = TRUE), 4)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:15:03