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

如何在R中对分组数据计算滚动最小值及差值?

在R中按分组计算截至当前的最低值及变化量的实现方法

方法一:使用dplyr包(推荐,代码简洁易读)

先构造示例数据方便测试:

# 构造示例数据
df <- data.frame(
  id = c(rep(1618,6), rep(3512,6)),
  date = rep(c("01/01/23","02/01/23","03/01/23","04/01/23","05/01/23","06/01/23"),2),
  value = c(10,10,6,8,10,4,1,1,3,4,0,8)
)

# 加载dplyr包(未安装的话先运行 install.packages("dplyr"))
library(dplyr)

# 分组计算目标列
result <- df %>%
  group_by(id) %>%
  mutate(
    lowest = cummin(value),  # 计算截至当前行的累积最小值
    delta_lowest = lowest - lag(lowest, default = first(lowest))  # 计算最低值变化量,首次为0
  ) %>%
  ungroup()

# 查看结果
print(result)

运行后lowest列会输出每组截至当前的最小value,delta_lowest仅在最低值更新时显示差值,其余情况为0,完全匹配预期输出。

方法二:使用data.table包(适合大数据场景,效率更高)

如果处理超大数据集,data.table的运算速度优势更显著:

# 加载data.table包(未安装的话先运行 install.packages("data.table"))
library(data.table)

# 转换为data.table格式
dt <- as.data.table(df)

# 分组计算
dt[, `:=`(
  lowest = cummin(value),
  delta_lowest = c(0, diff(cummin(value)))
), by = id]

# 查看结果
print(dt)

这里通过diff计算累积最小值的差值,再在开头补0,实现和dplyr一致的效果。

内容的提问来源于stack exchange,提问作者t.pellegrom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:00:15