Description Usage Arguments Details Value Note Author(s) See Also Examples
lag, lead, and diff functions for class pseries.
1 2 3 4 5 6 7 8 9 10 
x 
a 
k 
an integer, the number of lags for the 
... 
further arguments (currently none evaluated). 
shift 
character, either 
lag 
the number of lags for the 
This set of functions perform lagging, leading (lagging in the
opposite direction), and differencing operations on pseries
objects, i. e., they take the panel structure of the data into
account by performing the operations per individual.
Argument shift
controls the shifting of observations to be used
by methods lag
, lead
, and diff
:
#'  shift = "time"
(default): Methods respect the
numerical value in the time dimension of the index. The time
dimension needs to be interpretable as a sequence t, t+1, t+2,
... where t is an integer (from a technical viewpoint,
as.numeric(as.character(index(your_pdata.frame)[[2]]))
needs to
result in a meaningful integer).
shift = "row":
Methods perform the shifting operation based
solely on the "physical position" of the observations,
i.e., neighbouring rows are shifted per individual. The value in the
time index is not relevant in this case.
For consecutive time periods per individual, a switch of shifting behaviour results in no difference. Different return values will occur for nonconsecutive time periods per individual ("holes in time"), see also Examples.
An object of class pseries
, if the argument specifying the lag
has length 1 (argument k
in functions lag
and lead
,
argument lag
in function diff
).
A matrix containing the various series in its columns, if the argument specifying the lag has length > 1.
The sign of k
in lag.pseries
results in inverse behaviour
compared to stats::lag()
and zoo::lag.zoo()
.
Yves Croissant and Kevin Tappe
To check if the time periods are consecutive per
individual, see is.pconsecutive()
.
For further function for 'pseries' objects: between()
,
Between(), Within()
, summary.pseries()
,
print.summary.pseries()
, as.matrix.pseries()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  # First, create a pdata.frame
data("EmplUK", package = "plm")
Em < pdata.frame(EmplUK)
# Then extract a series, which becomes additionally a pseries
z < Em$output
class(z)
# compute the first and third lag, and the difference lagged twice
lag(z)
lag(z, 3)
diff(z, 2)
# compute negative lags (= leading values)
lag(z, 1)
lead(z, 1) # same as line above
identical(lead(z, 1), lag(z, 1)) # TRUE
# compute more than one lag and diff at once (matrix returned)
lag(z, c(1,2))
diff(z, c(1,2))
## demonstrate behaviour of shift = "time" vs. shift = "row"
# delete 2nd time period for first individual (1978 is missing (not NA)):
Em_hole < Em[2, ]
is.pconsecutive(Em_hole) # check: nonconsecutive for 1st individual now
# original nonconsecutive data:
head(Em_hole$emp, 10)
# for shift = "time", 11979 contains the value of former 11977 (2 periods lagged):
head(lag(Em_hole$emp, k = 2, shift = "time"), 10)
# for shift = "row", 11979 contains NA (2 rows lagged (and no entry for 1976):
head(lag(Em_hole$emp, k = 2, shift = "row"), 10)

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.