Hi, I was wondering if there is a more efficient way of handling the following method of creating a lagged value in a data frame without using the recursive 'for(i in 1:n)' loop and without using as.ts #Steps to creating a lag variable in a data frame 'my.dat.fr' # with 275 columns, 2400 rows of numbers and factors . The #variable x is a factor of #with five different levels the way i am creating the variable now is: attach(my.dat.fr) #my.dat.fr contains a variable 'x', i want to create #lagged variables #of this without using as.ts(). Is #there a more effient way of doing this than#below and #without using a recursive loop such as #for( i in 1:obs)x.lag[i]= x[(i-1)] 1.here is the way i am doing the lag now x=c(3,2,3,2,1,1,1,2,1,2,1,3...1) obs=length(x) x.nolag=x[2:obs] x.lag1=x[1:(obs-1)] my.new=cbind(x.nolag,x.lag1) #since my data frame must line up my orginal x values to other columns I also # add the following x.fill= cbind(0,0) # as named the above cell lines up my factor to other factors in my data frame, #since I had chopped off the first x observation to create x above (ie x[2:obs]) #then finally my.dat.fr=rbind(x.fill, my.new) my.dat.fr #Is there a easier way to create a lag variable and install in my data frame? #thankyou in advance, Sri
?diff --Matt -----Original Message----- From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-bounces at stat.math.ethz.ch]On Behalf Of s viswanath Sent: Friday, October 29, 2004 7:22 AM To: r-help at stat.math.ethz.ch Subject: [R] lag variable addition to data frame question Hi, I was wondering if there is a more efficient way of handling the following method of creating a lagged value in a data frame without using the recursive 'for(i in 1:n)' loop and without using as.ts #Steps to creating a lag variable in a data frame 'my.dat.fr' # with 275 columns, 2400 rows of numbers and factors . The #variable x is a factor of #with five different levels the way i am creating the variable now is: attach(my.dat.fr) #my.dat.fr contains a variable 'x', i want to create #lagged variables #of this without using as.ts(). Is #there a more effient way of doing this than#below and #without using a recursive loop such as #for( i in 1:obs)x.lag[i]= x[(i-1)] 1.here is the way i am doing the lag now x=c(3,2,3,2,1,1,1,2,1,2,1,3...1) obs=length(x) x.nolag=x[2:obs] x.lag1=x[1:(obs-1)] my.new=cbind(x.nolag,x.lag1) #since my data frame must line up my orginal x values to other columns I also # add the following x.fill= cbind(0,0) # as named the above cell lines up my factor to other factors in my data frame, #since I had chopped off the first x observation to create x above (ie x[2:obs]) #then finally my.dat.fr=rbind(x.fill, my.new) my.dat.fr #Is there a easier way to create a lag variable and install in my data frame? #thankyou in advance, Sri ______________________________________________ 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
Hello Sri,
how about embed() in stats?
Citing from the doc's detail section:
"Each row of the resulting matrix consists of sequences 'x[t]',
'x[t-1]', ..., 'x[t-dimension+1]', where 't' is the
original index
of 'x'. If 'x' is a matrix, i.e., 'x' contains more
than one
variable, then 'x[t]' consists of the 't'th observation on
each
variable.",
and have a look at the example's output:
embed> x <- 1:10
embed> embed(x, 3)
[,1] [,2] [,3]
[1,] 3 2 1
[2,] 4 3 2
[3,] 5 4 3
[4,] 6 5 4
[5,] 7 6 5
[6,] 8 7 6
[7,] 9 8 7
[8,] 10 9 8
does this fit your definition of 'lag'? Please note, that the
'starting
values' are skipped, i.e. no NAs are inserted.
HTH,
Bernhard
ps: Have a look at the function body, too.>
> ?diff
>
> --Matt
>
> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch]On Behalf Of s viswanath
> Sent: Friday, October 29, 2004 7:22 AM
> To: r-help at stat.math.ethz.ch
> Subject: [R] lag variable addition to data frame question
>
>
> Hi,
>
> I was wondering if there is a more efficient way of handling
> the following
> method of creating a lagged value in a data frame without using the
> recursive
> 'for(i in 1:n)' loop and without using as.ts
>
> #Steps to creating a lag variable in a data frame 'my.dat.fr'
> # with 275 columns, 2400 rows of numbers and factors . The
> #variable x is a
> factor of #with five different levels
> the way i am creating the variable now is:
>
> attach(my.dat.fr)
> #my.dat.fr contains a variable 'x', i want to create #lagged
> variables #of
> this without using as.ts(). Is #there a more effient way of doing this
> than#below and #without using a recursive loop such as
> #for( i in 1:obs)x.lag[i]= x[(i-1)]
>
> 1.here is the way i am doing the lag now
> x=c(3,2,3,2,1,1,1,2,1,2,1,3...1)
>
> obs=length(x)
>
> x.nolag=x[2:obs]
> x.lag1=x[1:(obs-1)]
>
> my.new=cbind(x.nolag,x.lag1)
>
> #since my data frame must line up my orginal x values to
> other columns I
> also # add the following
>
>
> x.fill= cbind(0,0)
> # as named the above cell lines up my factor to other factors
> in my data
> frame, #since I had chopped off the first x observation to
> create x above
> (ie x[2:obs]) #then finally
>
> my.dat.fr=rbind(x.fill, my.new)
> my.dat.fr
>
> #Is there a easier way to create a lag variable and install in my data
> frame?
> #thankyou in advance, Sri
>
> ______________________________________________
> 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
>
> ______________________________________________
> 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
>
--------------------------------------------------------------------------------
The information contained herein is confidential and is inte...{{dropped}}