Skip to content

creating lagged variable in panel data

6 messages · Alok K Bohara, PhD, michael.weylandt at gmail.com (R. Michael Weylandt, arun +2 more

#
Hi

I found an example in R to create a lagged panel data set which works 
fine.  The only problem is that it adds the lagged variable as follows

wage2.dat

           year person        wage        lag(wage, -1)
1.1  1980      1 -0.75843997            NA
1.2  1981      1  0.27233048   -0.75843997
1.3  1982      1 -1.58335767    0.27233048
1.4  1983      1  0.36805926   -1.58335767
1.5  1984      1 -0.52312153    0.36805926
2.6  1980      2 -0.53559110            NA
2.7  1981      2 -0.94935350   -0.53559110
2.8  1982      2  0.10486688   -0.94935350
2.9  1983      2 -0.50266443    0.10486688
2.10 1984      2  0.14644024   -0.50266443
.
.

Is there anyway  I could rename the last column      wag.lag1? Thanks.


Best,
Alok
Of course:

colnames(dats)[4] <- "new name"

M
On Aug 29, 2012, at 9:34 AM, "Alok K Bohara, PhD" <bohara at unm.edu> wrote:

            
#
HI,
Try this:
wage2.dat<-read.table(text="
? year person?? wage??????? lag(wage,-1)
? 1980????? 1 -0.75843997??????????? NA
? 1981????? 1? 0.27233048? -0.75843997
? 1982????? 1 -1.58335767??? 0.27233048
? 1983????? 1? 0.36805926? -1.58335767
? 1984????? 1 -0.52312153??? 0.36805926
? 1980????? 2 -0.53559110??????????? NA
? 1981????? 2 -0.94935350? -0.53559110
? 1982????? 2? 0.10486688? -0.94935350
? 1983????? 2 -0.50266443??? 0.10486688
?1984????? 2? 0.14644024? -0.50266443
",sep="",header=TRUE)
?row.names(wage2.dat)<-c(paste0(1,".",1:5),paste0(2,".",6:10))
names(wage2.dat)[4]<-"wag.lag1"
A.K.




----- Original Message -----
From: "Alok K Bohara, PhD" <bohara at unm.edu>
To: R-help at r-project.org
Cc: 
Sent: Wednesday, August 29, 2012 10:34 AM
Subject: [R] creating lagged variable in panel data

Hi

I found an example in R to create a lagged panel data set which works fine.? The only problem is that it adds the lagged variable as follows

wage2.dat

? ? ? ? ? year person? ? ? ? wage? ? ? ? lag(wage, -1)
1.1? 1980? ? ? 1 -0.75843997? ? ? ? ? ? NA
1.2? 1981? ? ? 1? 0.27233048?  -0.75843997
1.3? 1982? ? ? 1 -1.58335767? ? 0.27233048
1.4? 1983? ? ? 1? 0.36805926?  -1.58335767
1.5? 1984? ? ? 1 -0.52312153? ? 0.36805926
2.6? 1980? ? ? 2 -0.53559110? ? ? ? ? ? NA
2.7? 1981? ? ? 2 -0.94935350?  -0.53559110
2.8? 1982? ? ? 2? 0.10486688?  -0.94935350
2.9? 1983? ? ? 2 -0.50266443? ? 0.10486688
2.10 1984? ? ? 2? 0.14644024?  -0.50266443
.
.

Is there anyway? I could rename the last column? ? ? wag.lag1? Thanks.


Best,
Alok

______________________________________________
R-help at r-project.org 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.
#
Thanks for the input.   I wanted to avoid counting the column number.  
In any case,  in the script -- wage.lag1 = lag(wage, -1) seems to do the 
trick.

Alok

On 8/29/2012 12:29 PM, R. Michael Weylandt <michael.weylandt at gmail.com> 
wrote:

  
    
#
On Wed, Aug 29, 2012 at 8:20 PM, Alok Bohara, PhD <bohara at unm.edu> wrote:
The important thing is that "4" in my example below can be any
computable expression: e.g., if you want the last column

colnames(dats)[NCOL(dats)] <- ...

Alternatively, you can change the name at construction, but I couldn't
give you a hint there since you didn't tell us how you went about
adding the column.

Note something like this though:

dts <- data.frame(x = 1:5, y = letters[5:1])

dts2 <- cbind(dts, z = rnorm(5))

print(dts2)

Cheers,
Michael
#
Sorry,  this is what I used :

f <- function(x) {
		wage <- ts(x$wage, start = x$year[1])
		idx <- seq(length = length(wage))
		wages <- cbind(wage, wage.lag1 = lag(wage, -1))[idx,]
		cbind(x, wages)
	}

	result <- do.call("rbind", by(A, A$person, f))
	result


Alok
On 8/29/2012 7:43 PM, R. Michael Weylandt wrote: