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
相关产品推荐
相关产品推荐

