What's the opposite function to lag for an R vector/dataframe?

后端 未结 4 1250
不知归路
不知归路 2021-02-20 11:49

I have a problem dealing with time series in R.

#--------------read data

wb = loadWorkbook(\"Countries_Europe_Prices.xlsx\") 
df = readWorksheet(wb, sheet=\"Sh         


        
4条回答
  •  隐瞒了意图╮
    2021-02-20 12:37

    There is an easier way of doing this which I have captured fully from this link. What I will do here is explaining what should you do in steps:

    First create the following function by running the following code:

    shift<-function(x,shift_by){
        stopifnot(is.numeric(shift_by))
        stopifnot(is.numeric(x))
    
        if (length(shift_by)>1)
            return(sapply(shift_by,shift, x=x))
    
        out<-NULL
        abs_shift_by=abs(shift_by)
        if (shift_by > 0 )
            out<-c(tail(x,-abs_shift_by),rep(NA,abs_shift_by))
        else if (shift_by < 0 )
            out<-c(rep(NA,abs_shift_by), head(x,-abs_shift_by))
        else
            out<-x
        out
    }
    

    This will create a function called shift with two arguments; one is the vector you need to operate its lag/lead and the other is number of lags/leads you need.

    Example:

    Suppose you have the following vector:

    x<-seq(1:10)
    
    x
     [1]  1  2  3  4  5  6  7  8  9 10
    

    if you need x's first order lag

    shift(x,-1)
    [1] NA  1  2  3  4  5  6  7  8  9 
    

    if you need x's first order lead (negative lag)

    shift(x,1)
    [1]  2  3  4  5  6  7  8  9 10 NA
    

提交回复
热议问题