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}}