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

使用dplyr mutate按雨量站分组基于前一行结果计算降雨新字段

实现代码

首先加载所需依赖包:

library(tidyverse)

写法1:基础循环逻辑(可读性高,适合调试)

rain_result <- raw_rain_data %>%
  # 按雨量站、日期升序排序,保证每个站的计算顺序正确
  arrange(Gauge, Sample.Date) %>%
  # 按雨量站分组,各组独立计算互不干扰
  group_by(Gauge) %>%
  mutate(
    Rain_Calc = {
      rf_vec <- Rainfall
      calc_vec <- numeric(length(rf_vec))
      # 分组首行即2016-01-02,初始化值为1.0
      calc_vec[1] <- 1.0
      # 迭代计算后续所有日期的Rain_Calc
      for (i in 2:length(rf_vec)) {
        calc_vec[i] = 0.7 * (rf_vec[i] + calc_vec[i-1])
      }
      calc_vec
    }
  ) %>%
  ungroup()

写法2:purrr函数式写法(代码更简洁)

rain_result <- raw_rain_data %>%
  arrange(Gauge, Sample.Date) %>%
  group_by(Gauge) %>%
  mutate(
    Rain_Calc = c(1, accumulate(tail(Rainfall, -1), ~0.7*(.y + .x)))
  ) %>%
  ungroup()
注意事项
  • 以上代码默认每个Gauge分组的第一行对应日期为2016-01-02,如果原始数据存在日期缺失、分组内首行不是起始日的情况,需要先做数据过滤/补全,确保分组内的行顺序和日期升序完全匹配
  • 两种写法对27万行的数据集运算效率没有明显差异,可根据个人使用习惯选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:45:03