在R中创建滚动列表

在R中创建滚动列表,r,rolling-computation,R,Rolling Computation,给定一个向量(数据帧的列),我想创建一个滚动向量 l = 0:10 将返回(窗口为3): 1)rollapplyr是一个9x3矩阵,其每一行都是所要求的列表元素之一,并且split将其转换为向量列表。尽管这给出了您所要求的,但您可能只是想迭代该列表,在这种情况下,用您希望在该迭代中使用的任何函数替换c可能更容易。e、 g.rollappy(l,3,sd) 2)嵌入也可以像这样使用base R: r <- embed(l, 3)[, 3:1] split(r, row(r)) r您可以使

给定一个向量(数据帧的列),我想创建一个滚动向量

l = 0:10
将返回(窗口为3):

1)rollapply
r
是一个9x3矩阵,其每一行都是所要求的列表元素之一,并且
split
将其转换为向量列表。尽管这给出了您所要求的,但您可能只是想迭代该列表,在这种情况下,用您希望在该迭代中使用的任何函数替换
c
可能更容易。e、 g.
rollappy(l,3,sd)

2)嵌入也可以像这样使用base R:

r <- embed(l, 3)[, 3:1]
split(r, row(r))

r您可以使用以下函数(我假设您希望先对值进行排序。如果不希望,只需删除我使用的
sort()
)的代码行即可:

您可以在其他情况下使用此功能,甚至可以根据需要更改窗口大小

希望有帮助

Map(`:`,头部(l,-2),尾部(l,-2))
library(zoo)
l <- 0:10 # test input
r <- rollapply(l, 3, c)
split(r, row(r))
$`1`
[1] 0 1 2

$`2`
[1] 1 2 3

$`3`
[1] 2 3 4

$`4`
[1] 3 4 5

$`5`
[1] 4 5 6

$`6`
[1] 5 6 7

$`7`
[1] 6 7 8

$`8`
[1] 7 8 9

$`9`
[1]  8  9 10
r <- embed(l, 3)[, 3:1]
split(r, row(r))
roll<-function(list,window){
  list<-sort(list,decreasing = FALSE)
  res<-vector(mode = "list")
  for(i in 1:(length(list) - window + 1)){
    res[[i]]<-list[i:(i + window - 1)]
  }
  return(res)
}
test<-0:10

roll(list = test,window = 3)
[[1]]
[1] 0 1 2

[[2]]
[1] 1 2 3

[[3]]
[1] 2 3 4

[[4]]
[1] 3 4 5

[[5]]
[1] 4 5 6

[[6]]
[1] 5 6 7

[[7]]
[1] 6 7 8

[[8]]
[1] 7 8 9

[[9]]
[1]  8  9 10