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

基于每日温度DataFrame与日期区间DataFrame计算区间温度均值

计算日期区间内的温度均值并添加到数据框

现有存储每日温度数据的DataFrame A,以及存储日期区间端点的DataFrame B。需要以B中连续行的日期为区间,计算A中对应区间的温度均值,并将结果添加为B的新列。例如计算2021-02-15至2021-02-18、2021-02-18至2021-02-23等区间的温度均值。

数据构造代码

## 每日温度数据框
date <- as.Date(c('02-15-2021', '02-16-2021', '02-17-2021', '02-18-2021',
                  '02-19-2021', '02-20-2021', '02-21-2021', '02-22-2021', 
                  '02-23-2021', '02-24-2021', '02-25-2021', '02-26-2021', 
                  '02-27-2021', '02-28-2021', '02-29-2021'), "%m-%d-%Y")
temp <- c(26, 27, 28, 30, 32, 27, 28, 29, 27, 26, 28, 29, 28, 25, 26)

A <- data.frame(date, temp)
head(A)

date2 <- as.Date(c('02-15-2021', '02-18-2021', '02-23-2021', 
                   '02-27-2021', '02-29-2021'), "%m-%d-%Y")

## 用于计算温度均值的日期区间端点数据框(连续行日期构成区间)
B <- as.data.frame(date2)
head(B)

解决方案

方法一:基础R实现

# 提取区间的起始和结束日期
start_dates <- B$date2[-nrow(B)]
end_dates <- B$date2[-1]

# 逐个计算每个区间的温度均值
temp_means <- sapply(seq_along(start_dates), function(i) {
  mean(A$temp[A$date >= start_dates[i] & A$date <= end_dates[i]])
})

# 将均值添加到B中,最后一行无后续区间,设为NA
B$temp_mean <- c(temp_means, NA)

# 查看结果
print(B)

方法二:dplyr包实现(更简洁)

library(dplyr)

# 为B生成区间并计算均值,保留原所有行
B <- B %>%
  # 生成下一行的日期作为区间结束
  mutate(end_date = lead(date2)) %>%
  # 按行计算每个区间的均值,无结束日期的行设为NA
  rowwise() %>%
  mutate(temp_mean = ifelse(is.na(end_date), 
                            NA, 
                            mean(A$temp[A$date >= date2 & A$date <= end_date]))) %>%
  # 移除临时的结束日期列(可选)
  select(-end_date)

# 查看结果
print(B)

说明

  • 上述代码中,区间为闭区间(包含起始和结束日期),若需左闭右开区间,可将条件改为A$date >= start_dates[i] & A$date < end_dates[i]。
  • B的最后一行无后续日期,因此对应均值设为NA,可根据实际需求调整处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:35:03