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

如何用lag值条件更新DataFrame中RAIN列的值?

问题:DataFrame中RAIN列的递推更新需求

需求说明

需要更新DataFrame的RAIN列,规则为:若当前行的RAIN值小于上一行的RAIN值,则将其替换为上一行的RAIN值。

样本DataFrame

TRGCODE    gr      DATE      TIME     RAIN
   12      24   2017-03-15   1645     00
   12      24   2017-03-15   1700     00
   12      24   2017-03-15   1715     0.5
   12      24   2017-03-15   1730     00
   12      24   2017-03-15   1745     0.5
   12      24   2017-03-15   1800     0.5
   12      24   2017-03-15   1815     00
   12      24   2017-03-15   1830     00
   12      24   2017-03-15   1845     0.5
   12      24   2017-03-15   1900     00
   12      24   2017-03-15   1915     00
   12      24   2017-03-15   1930     0.5
   12      24   2017-03-15   1945     0.5

尝试的代码及问题

使用以下代码后,仅修改了1730、1815、1900时间点的RAIN值,1830和1915的未被修改,未达到预期效果:

df <- df %>% group_by(TRGCODE, gr) %>% dplyr::mutate(RAIN = ifelse(RAIN < lag(RAIN, default = first(RAIN)), lag(RAIN), RAIN))

期望输出

TRGCODE    gr      DATE      TIME     RAIN
   12      24   2017-03-15   1645     00
   12      24   2017-03-15   1700     00
   12      24   2017-03-15   1715     0.5
   12      24   2017-03-15   1730     0.5
   12      24   2017-03-15   1745     0.5
   12      24   2017-03-15   1800     0.5
   12      24   2017-03-15   1815     0.5
   12      24   2017-03-15   1830     0.5
   12      24   2017-03-15   1845     0.5
   12      24   2017-03-15   1900     0.5
   12      24   2017-03-15   1915     0.5
   12      24   2017-03-15   1930     0.5
   12      24   2017-03-15   1945     0.5

原因分析

原代码中lag(RAIN)调用的是原始RAIN列的上一行值,而非更新后的值。比如1815行被修改为0.5后,1830行判断时,lag(RAIN)仍然是原始的00,因此00不小于00,不会触发替换逻辑。

解决方案

使用purrr::accumulate实现递推更新,每一步判断都基于前一行更新后的RAIN值:

library(dplyr)
library(purrr)

df <- df %>%
  group_by(TRGCODE, gr) %>%
  mutate(RAIN = accumulate(RAIN, ~ifelse(.y < .x, .x, .y))) %>%
  ungroup()

代码说明

  • accumulate函数会遍历RAIN列,.x代表前一个元素(已更新后的值),.y代表当前元素
  • 每次判断当前元素.y是否小于前一个元素.x,若是则用.x替换.y,否则保留.y
  • 分组内的递推逻辑保证了每个组独立处理,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:54:12