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

R语言实现父向量拆分为等长重叠子向量并合并末尾不足长度子向量

固定长度重叠子向量拆分实现(末尾短块合并逻辑)

核心需求

  • 将父向量拆分为多个固定长度的重叠子向量
  • 若最后生成的子向量长度不足设定的子向量长度,将其与倒数第二个子向量合并

原有实现问题

原有代码运行后会生成长度不达标的末尾子向量,示例输出如下:

[1] 1 2 3 4 5 6 7 8
[2] 5 6 7 8 9 10 11 12
[3] 9 10 11 12 13 14 15 16
[4] 13 14 15 16 17
不符合使用要求,需要将最后一段长度为5的子向量合并到前一段中。

修正后可直接运行代码

########块拆分计算函数######################
blocks <- function(len, ov, n) {
  starts <- unique(sort(c(seq(1, n, len), seq(len-ov+1, n, len))))
  ends <- pmin(starts + len - 1, n)
  # 截断到首次覆盖到向量末尾的位置
  num <- match(n, ends)
  res <- head(data.frame(starts, ends), num)
  # 新增末尾短块合并逻辑
  if(nrow(res) >= 2){
    last_block_len <- res$ends[nrow(res)] - res$starts[nrow(res)] + 1
    if(last_block_len < len){
      res$ends[nrow(res)-1] <- n
      res <- res[-nrow(res), ]
    }
  }
  return(res)
}

########测试调用#############
vec = 1:17
len = 8 # 子向量设定长度
ov = ceiling(len/2) # 重叠长度,这里默认取子向量长度的一半向上取整
b <- blocks(len, ov, length(vec))
# 输出最终拆分结果
with(b, Map(function(i, j) vec[i:j], starts, ends))

运行输出结果

[1] 1 2 3 4 5 6 7 8
[2] 5 6 7 8 9 10 11 12
[3] 9 10 11 12 13 14 15 16 17

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 05:24:01