r - R:将向量拆分为一些重叠的子向量,其第一个元素被反弹
问题描述
我想拆分父子向量,使这些条件成立:
- 每个子向量具有相等且恒定的长度
l
。 - 子向量相互重叠
l -1
- 子向量的数量为
length(ts) - l + 2
- 最后一个子向量应该包含父向量的第一个元素作为它的最后一个子元素。
.
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
解决方案
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
推荐阅读
- ruby - 使用 watir 提交文本字段
- java - 只有 .class 文件的 Java/Android SDK?
- javascript - Json 的字符串路径
- javascript - javascript - 当对象数组完全匹配时如何获取对象数组中的对象的索引
- python - 无法将 python 脚本输出导出到同一个 csv 文件中
- java - 为什么Hibernate源码中没有org.hibernate.hql.antlr包?
- javascript - js中的收银机
- css - ie11忽略css的特定块但不是整个样式表
- javascript - 将数据对象传递给触发事件
- c++ - 在 Windows 上读取/写入未格式化的 SD 卡