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
相关产品推荐
相关产品推荐

