R中样本重叠的分裂向量

R中样本重叠的分裂向量,r,R,假设我有一个有1000个值的向量,我想把这个向量“分割/分组”成多个向量,每个向量有200个值,它们之间有100个值的重叠 例如: 应返回以下向量: [0:200] [100:300] [200:400] [300:500] ... 。。。你明白了 R中是否有一个函数可以实现这一点?没有,但这可以实现: splitWithOverlap <- function(vec, seg.length, overlap) { starts = seq(1, length(vec), by=se

假设我有一个有1000个值的向量,我想把这个向量“分割/分组”成多个向量,每个向量有200个值,它们之间有100个值的重叠

例如:

应返回以下向量:

[0:200] [100:300] [200:400] [300:500] ...
。。。你明白了


R中是否有一个函数可以实现这一点?

没有,但这可以实现:

splitWithOverlap <- function(vec, seg.length, overlap) {
  starts = seq(1, length(vec), by=seg.length-overlap)
  ends   = starts + seg.length - 1
  ends[ends > length(vec)] = length(vec)

  lapply(1:length(starts), function(i) vec[starts[i]:ends[i]])
}

rollappy
创建一个矩阵
m
,其行是所需的向量。如果结果足够,则在该点停止,省略最后一行代码;否则,如果需要向量列表,则按行拆分:

library(zoo)

x <- 1:1000  # test input

m <- rollapply(x, 200, by = 100, c)
split(m, row(m))
图书馆(动物园)

只需做一点工作,就可以将以下函数组合在一起

?图形::co.interval

 co.intervals(vec, 9, 0.5) 
 # then use split, or shingle
?格子::木瓦

 shingle(vec, intervals=co.intervals(vec, 9, 0.5))

你的答案仍然是最好的,但还有一个底线。最后一个块[10]根本不需要。你能检查一下吗?我看没有必要。它救了我一天!如果不需要,只需将列表另存为对象(myList)即可删除最后一个块myList
 shingle(vec, intervals=co.intervals(vec, 9, 0.5))