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

使用mutate计算前一周温度平均值的技术问询

解决方案

这里提供两种高效的方法来计算每条记录日期前一周的温度平均值,解决你之前用case_when和group_by无法实现滚动窗口的问题:

方法一:dplyr + slider(推荐,贴合tidyverse语法)

slider包专门处理基于时间/索引的滚动窗口计算,能精准匹配日期范围,不受日期不连续的影响(比如某天数据缺失的情况)。

  1. 加载所需工具包:
library(dplyr)
library(slider)
library(lubridate)
  1. 确保日期格式正确并排序:
# 若dt还不是Date类型,先转换格式
weather_data <- weather_data %>%
  mutate(dt = as_date(dt)) %>%
  arrange(dt) # 必须按日期排序,否则窗口计算会出错
  1. 创建prev.temp列:
weather_data <- weather_data %>%
  mutate(prev.temp = slide_index_dbl(
    .x = temp,          # 要计算均值的数值列
    .i = dt,            # 用于定义窗口的日期列
    .y = dt,            # 当前记录的日期
    .f = function(x, dates, current_dt) {
      # 筛选当前日期前7天(不含当天)的温度数据,计算均值
      target_dates <- dates >= current_dt - days(7) & dates < current_dt
      mean(x[target_dates], na.rm = TRUE)
    }
  ))

方法二:data.table(适合大数据量,计算高效)

如果后续数据量增大,data.table的非等值连接能快速完成需求:

  1. 转换数据格式并排序:
library(data.table)
setDT(weather_data)
weather_data[, dt := as.Date(dt)]
setorder(weather_data, dt) # 按日期排序
  1. 计算前一周温度均值:
weather_data[, prev.temp := sapply(dt, function(current_dt) {
  # 匹配当前日期前7天到前一天的所有记录,计算温度均值
  mean(weather_data[dt >= current_dt - 7 & dt < current_dt, temp], na.rm = TRUE)
})]

关键注意事项

  • 排序是前提:无论用哪种方法,必须确保数据按dt升序排列,否则窗口范围会匹配错误。
  • 缺失值处理:na.rm = TRUE用于忽略温度列的缺失值,若数据无缺失可移除该参数。
  • 窗口范围可调整:如果需要修改前一周的定义(比如包含当前日期),只需调整dates < current_dt这类条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:23:17