首页 > 解决方案 > R:将向量拆分为一些重叠的子向量,其第一个元素被反弹

问题描述

我想拆分父子向量,使这些条件成立:

  1. 每个子向量具有相等且恒定的长度l
  2. 子向量相互重叠l -1
  3. 子向量的数量为length(ts) - l + 2
  4. 最后一个子向量应该包含父向量的第一个元素作为它的最后一个子元素。

.

ts <- 1:11 # the parent vector
l <- 7 # constant length of sub-vectors to be
m <- length(ts) - l + 1 # number of sub-vector to be
split(t(embed(ts, m))[m:1,], 1:m) 

当我尝试这个(使用m <- length(ts) - l + 1)时,我得到了l = 7我想要的,而m = 5不是m = 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

当我尝试这个(使用m <- length(ts) - l + 2)时,我得到了m = 6我想要的结果,而l = 6不是l = 7.

ts <- 1:11 # the parent vector
l <- 7 # constant length of sub-vectors to be
m <- length(ts) - l + 2 # number of sub-vector to be
split(t(embed(ts, m))[m:1,], 1:m) 

这就是我得到的

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

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

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

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

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

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

我想要的是

#$`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

标签: rvectorsplit

解决方案


Fill a matrix with appropriate dimensions, index, and split

asplit(
  matrix(ts, nrow = length(ts) + 1, ncol = length(ts) - l + 1)[1:(l + 1), ],
  MARGIN = 2)

#[[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

推荐阅读