[R] lead
Adaikalavan Ramasamy
ramasamy at cancer.org.uk
Thu Jul 12 15:56:30 CEST 2007
How about
revLag <- function(x, shift=1) rev( Lag(rev(x), shift) )
x <- 1:5
revLag(x, shift=2)
As a matter of fact, here is a generalized version of Lag to include
negative shifts.
myLag <- function (x, shift = 1){
xLen <- length(x)
ret <- as.vector(character(xLen), mode = storage.mode(x))
attrib <- attributes(x)
if (!is.null(attrib$label))
atr$label <- paste(attrib$label, "lagged", shift, "observations")
if (shift == 0) return(x)
if( xLen <= abs(shift) ) return(ret)
if (shift < 0) x <- rev(x)
retrange = 1:abs(shift)
ret[-retrange] <- x[1:(xLen - abs(shift))]
if (shift < 0) ret <- rev(ret)
attributes(ret) <- attrib
return(ret)
}
and some test examples:
myLag(1:5, shift=2)
[1] NA NA 1 2 3
myLag(letters[1:4], shift=2)
[1] "" "" "a" "b"
myLag(factor(letters[1:4]), shift=2)
[1] <NA> <NA> a b
Levels: a b c d
myLag(1:5, shift=-2)
[1] 3 4 5 NA NA
myLag(letters[1:4], shift=-2)
[1] "c" "d" "" ""
myLag(factor(letters[1:4]), shift=-2)
[1] c d <NA> <NA>
Levels: a b c d
Regards, Adai
Aydemir, Zava (FID) wrote:
> Hi,
>
> is there any function in R that shifts elements of a vector to the
> opposite direction of what Lag() of the Hmisc package does? (something
> like, Lag(x, shift = -1) )
>
> Thanks
>
> Zava
> --------------------------------------------------------
>
> This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>
>
More information about the R-help
mailing list