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

R语言实现自定义窗口的条件求和功能咨询

R 自定义窗口求和功能实现

完整实现代码

sum_window_by_ones <- function(df, ones_col = "Ones", thats_col = "Thats", gap = 1) {
  # 定位所有Ones列为1的行号
  n_pos <- which(df[[ones_col]] == 1)
  # 遍历每个匹配行计算求和结果
  res <- lapply(n_pos, function(n) {
    # 计算窗口边界,自动钳位避免超出数据范围
    win_start <- max(1, n - gap)
    win_end <- min(nrow(df), n + gap)
    # 求和自动忽略NA值
    sum_val <- sum(df[win_start:win_end, thats_col], na.rm = TRUE)
    # 返回结构化结果
    data.frame(
      匹配行号 = n,
      窗口范围 = paste0(win_start, "-", win_end),
      求和结果 = sum_val
    )
  })
  # 合并结果为数据框返回
  do.call(rbind, res)
}

功能说明

  • 自动识别输入数据框中指定列取值为1的所有行号,支持多匹配场景
  • 窗口边界通过max/min函数钳位,若1位于数据集首尾,自动截断窗口到合法行号范围
  • 求和时默认开启na.rm = TRUE,自动忽略窗口内的NA值,仅对有效数据求和
  • 支持自定义gap参数,gap为N时窗口覆盖n-N到n+N共2N+1行(边界场景自动调整)

测试示例

使用你提供的测试数据运行:

# 测试数据
dat<- data.frame (
  'Ones'=c(0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0), 
  'Thats'=c(0,5,3,6,8,4,5,6,8,3,1,3,4,5,6,7,4,3,4,5)
)

# gap=1测试
sum_window_by_ones(dat, gap = 1)

# gap=2测试
sum_window_by_ones(dat, gap = 2)

输出结果

gap=1时输出:

匹配行号窗口范围求和结果
65-717
1110-127

gap=2时输出:

匹配行号窗口范围求和结果
64-829
119-1319

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:12:07