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

如何用R语言zoo包的rollapply函数获取滚动三元组最大值的位置

用zoo包rollapply获取滚动窗口内最大值的位置

核心解决方案

通过自定义函数配合rollapply,可以实现3个数据滚动窗口内最大值的位置计算,以下是具体代码示例:

  1. 加载包并创建示例数据
library(zoo)

# 示例数据框,可替换为你的真实数据
df <- data.frame(value = c(5, 2, 8, 3, 10, 4, 6))
  1. 计算窗口内最大值的相对位置(窗口内的1/2/3)
    定义函数返回窗口内最大值的相对索引,再用rollapply批量计算:
# 自定义函数:返回窗口内最大值的相对位置
get_max_rel_pos <- function(x) which.max(x)

# 生成目标列,不足3个数据的位置填充NA
df$position.of.max.group.of.three <- rollapply(
  df$value,
  width = 3,          # 滚动窗口大小
  FUN = get_max_rel_pos,
  fill = NA,          # 窗口不足时填充NA
  align = "right"     # 结果对应窗口最后一个元素的位置
)
  1. (可选)计算最大值在原数据中的绝对索引
    如果需要的是原数据的行号而非窗口内相对位置,可调整函数:
# 自定义函数:返回最大值在原数据中的绝对位置
get_max_abs_pos <- function(x) {
  # 获取当前窗口对应的原数据索引
  window_idx <- attr(x, "index")
  window_idx[which.max(x)]
}

df$abs_position.of.max.group.of.three <- rollapply(
  df$value,
  width = 3,
  FUN = get_max_abs_pos,
  fill = NA,
  align = "right"
)

关键参数说明

  • align:控制窗口对齐方式,"right"表示结果对应窗口最后一个元素(如第3行结果对应前3个数据),"left"对应窗口第一个元素,"center"对应窗口中间元素
  • partial=TRUE:如果想让前两个窗口(不足3个数据)也计算最大值位置,可添加该参数,此时第1行返回1,第2行返回最大值在两个数据中的位置

查看结果

运行上述代码后,查看数据框:

df

输出示例:

value position.of.max.group.of.three abs_position.of.max.group.of.three
1     5                             NA                                 NA
2     2                             NA                                 NA
3     8                              3                                 3
4     3                              2                                 3
5    10                              3                                 5
6     4                              2                                 5
7     6                              2                                 5

内容的提问来源于stack exchange,提问作者Vinicius B. de S. Moreira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:45:43