我有一个数组:
a <- c(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
b <- roll(a,2) # 4,5,1,2,3
Run Code Online (Sandbox Code Playgroud)
在R中有这样的功能吗?我一直在谷歌搜索,但"R Roll"主要给我关于西班牙语发音的页面.
Sim*_*lon 19
如何使用head和tail......
roll <- function( x , n ){
if( n == 0 )
return( x )
c( tail(x,n) , head(x,-n) )
}
roll(1:5,2)
#[1] 4 5 1 2 3
# For the situation where you supply 0 [ this would be kinda silly! :) ]
roll(1:5,0)
#[1] 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
关于使用head和tail...的一个很酷的事情,你得到一个负面的反向滚动n,例如
roll(1:5,-2)
[1] 3 4 5 1 2
Run Code Online (Sandbox Code Playgroud)
Jos*_*ien 17
这是一种替代方案,即使在x"滚动"超过一个完整周期(即何时abs(n) > length(x))时也具有工作优势:
roll <- function(x, n) {
x[(seq_along(x) - (n+1)) %% length(x) + 1]
}
roll(1:5, 2)
# [1] 4 5 1 2 3
roll(1:5, 0)
# [1] 1 2 3 4 5
roll(1:5, 11)
# [1] 5 1 2 3 4
Run Code Online (Sandbox Code Playgroud)
FWIW(而不是它值得多)它也适用于data.frames:
head(mtcars, 1)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4
head(roll(mtcars, 2), 1)
# gear carb mpg cyl disp hp drat wt qsec vs am
# Mazda RX4 4 4 21 6 160 110 3.9 2.62 16.46 0 1
Run Code Online (Sandbox Code Playgroud)
该软件包binhf具有以下功能shift:
library(binhf)
shift(1:5, places = 2)
#[1] 4 5 1 2 3
Run Code Online (Sandbox Code Playgroud)
地方可以是积极的也可以是消极的