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

R语言如何将向量拆分为首元素回弹的等长重叠子向量

父向量拆分需求

需要对父向量做拆分,满足以下4个条件:

  • 每个子向量的长度固定为常数l
  • 相邻子向量的重叠长度为l-1
  • 子向量的总数量为length(ts) - l + 2
  • 最后一个子向量的末尾元素为父向量的首元素
现有尝试存在的问题

第一次尝试

ts <- 1:11 # 父向量
l <- 7 # 子向量固定长度
m <- length(ts) - l + 1 # 子向量数量
split(t(embed(ts, m))[m:1,], 1:m) 

该代码输出的子向量长度为7符合要求,但子向量总数只有5,不符合预期的6个。

第二次尝试

调整子向量数量参数为m <- length(ts) - l + 2,代码如下:

ts <- 1:11 # 父向量
l <- 7 # 子向量固定长度
m <- length(ts) - l + 2 # 子向量数量
split(t(embed(ts, m))[m:1,], 1:m) 

该代码输出的子向量总数为6符合要求,但每个子向量长度变为6,不符合长度要求。

期望输出
#$`1`
#[1] 1 2 3 4 5 6 7

#$`2`
#[1] 2 3 4 5 6 7 8

#$`3`
#[1] 3 4 5 6 7 8 9

#$`4`
#[1]  4  5  6  7  8  9 10

#$`5`
#[1]  5  6  7  8  9 10 11

#$`6`
#[1]  6  7  8  9 10 11  1
解决方案

核心思路是先对原向量做扩展,在末尾追加首元素,补足最后一个滑动窗口的缺失元素,再做拆分即可,实现代码如下:

ts <- 1:11 # 父向量
l <- 7 # 子向量固定长度
m <- length(ts) - l + 2 # 预期子向量数量

# 扩展原向量,末尾添加首元素
ts_ext <- c(ts, ts[1])
# 生成滑动窗口矩阵,调整元素顺序后拆分
result <- split(t(embed(ts_ext, l))[l:1, ], 1:m)

运行代码即可得到符合所有要求的拆分结果。

内容的提问来源于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.02 13:54:05