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

如何在R中计算指定日期区间内df2的均值并添加至df1?

解决R语言中按时间区间计算均值的问题

搞定这个需求很简单,我给你两种靠谱的实现方法,分别用tidyverse的dplyr和基础R,你可以根据自己的习惯选择:

首先先复现你的原始数据(确保结果一致):

# 生成偶发事件数据df1
df1 = data.frame(date = c(as.Date('2020-01-01'), as.Date('2020-02-02'), as.Date('2020-03-01')), value = c(1,5,9))

# 生成每日记录数据df2
set.seed(1)
df2 = data.frame(date = seq.Date(from = as.Date('2020-01-01'), to = as.Date('2020-04-01'), by = 1), value = rnorm(92))

方法一:用dplyr(简洁易读)

这个方法用tidyverse的dplyr包,逻辑清晰,适合习惯管道操作的用户:

library(dplyr)

# 处理df1,添加区间结束日期并计算均值
df1_result <- df1 %>%
  # 给每行添加结束日期:下一行的date,最后一行设为df2的最大日期+1天(确保包含之后所有数据)
  mutate(end_date = lead(date, default = max(df2$date) + 1)) %>%
  # 按行遍历,计算对应区间的value均值
  rowwise() %>%
  mutate(value_new = mean(df2$value[df2$date >= date & df2$date < end_date], na.rm = TRUE)) %>%
  ungroup() %>%
  # 保留需要的列
  select(date, value, value_new)

# 查看结果
print(df1_result)

运行后你会得到和你期望完全一致的结果:

# A tibble: 3 × 3
  date       value value_new
  <date>     <dbl>     <dbl>
1 2020-01-01     1    0.117 
2 2020-02-02     5    0.0974
3 2020-03-01     9    0.124 

如果希望最后一行的value_new是NA而不是均值,只需要修改lead函数的默认值:

df1_result_na <- df1 %>%
  mutate(end_date = lead(date, default = NA)) %>%
  rowwise() %>%
  mutate(value_new = ifelse(is.na(end_date), NA, mean(df2$value[df2$date >= date & df2$date < end_date], na.rm = TRUE))) %>%
  ungroup() %>%
  select(date, value, value_new)

方法二:用基础R(无需额外包)

如果你不想加载第三方包,用基础R也能实现:

# 创建结束日期向量:下一行的date,最后一行设为df2最大日期+1天
end_dates <- c(df1$date[-1], max(df2$date) + 1)

# 循环计算每个区间的均值
df1$value_new <- sapply(1:nrow(df1), function(i) {
  # 筛选df2中在当前区间内的value,计算均值
  mean(df2$value[df2$date >= df1$date[i] & df2$date < end_dates[i]], na.rm = TRUE)
})

# 查看结果
print(df1)

同样能得到你想要的结果,逻辑和dplyr版本完全一致。

如果要最后一行设为NA,修改end_dates并调整循环逻辑即可:

end_dates_na <- c(df1$date[-1], NA)
df1$value_new_na <- sapply(1:nrow(df1), function(i) {
  if (is.na(end_dates_na[i])) {
    NA
  } else {
    mean(df2$value[df2$date >= df1$date[i] & df2$date < end_dates_na[i]], na.rm = TRUE)
  }
})

内容的提问来源于stack exchange,提问作者C. Denney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:12:49