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

