I have a vector:
JavaScript
x
2
1
a <- c(1,2,3,4,5)
2
And I’d like to do something like:
JavaScript
1
2
1
b <- roll(a, 2) # 4,5,1,2,3
2
Is there a function like that in R? I’ve been googling around, but “R Roll” mostly gives me pages about Spanish pronunciation.
Advertisement
Answer
How about using head
and tail
…
JavaScript
1
13
13
1
roll <- function( x , n ){
2
if( n == 0 )
3
return( x )
4
c( tail(x,n) , head(x,-n) )
5
}
6
7
roll(1:5,2)
8
#[1] 4 5 1 2 3
9
10
# For the situation where you supply 0 [ this would be kinda silly! :) ]
11
roll(1:5,0)
12
#[1] 1 2 3 4 5
13
One cool thing about using head
and tail
… you get a reverse roll with negative n
, e.g.
JavaScript
1
3
1
roll(1:5,-2)
2
[1] 3 4 5 1 2
3