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

R语言如何按分组计算从首行到当前行的滚动最大值

R 分组计算截止到前一行的累积最大值解决方案

你之前使用rollmax()未成功的原因是:zoo包的rollmax()是固定窗口宽度的滑动最大值函数,你的需求是计算分组内从首行到当前行的累积最大值,更适合使用R内置的cummax()函数实现,若要使用rollmax也需要调整窗口参数适配需求。

方案1:仅使用dplyr实现(推荐)

无需额外加载其他包,代码更简洁高效:

library(dplyr)

# 示例数据
df <- data.frame(id = c(1,1,1,1,2,2,2), value = c(2,5,3,2,4,5,4), result = c(NA,2,5,5,NA,4,5))

# 计算逻辑
df <- df %>%
  group_by(id) %>%
  # cummax计算从首行到当前行的累积最大值,lag偏移1位得到截止到上一行的最大值,首行自动为NA
  mutate(computed_result = lag(cummax(value))) %>%
  ungroup()

运行后computed_result列和你给出的result列完全一致,可通过以下代码验证:

identical(df$computed_result, df$result)
# 输出:[1] TRUE

方案2:搭配zoo包rollmax实现

如果需要使用rollmax函数,需将窗口宽度设置为随行号动态变化:

library(dplyr)
library(zoo)

df <- df %>%
  group_by(id) %>%
  # k = row_number() 表示窗口宽度等于当前行号,覆盖从首行到当前行的所有数据
  mutate(computed_result = lag(rollmax(value, k = row_number(), align = "right", fill = NA))) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:09