Find the "next" or "previous" values in a vector. Useful for comparing values ahead of or behind the current values.

lead(x, n = 1L, default = NA, order_by = NULL, ...)

lag(x, n = 1L, default = NA, order_by = NULL, ...)

Arguments

x

a vector of values

n

a postive integer of length 1, giving the number of positions to lead or lag by

default

value used for non-existant rows. Defaults to NA.

order_by

override the default ordering to use another vector

...

Needed for compatibility with lag generic.

Examples

lead(1:10, 1)
#> [1] 2 3 4 5 6 7 8 9 10 NA
lead(1:10, 2)
#> [1] 3 4 5 6 7 8 9 10 NA NA
lag(1:10, 1)
#> [1] NA 1 2 3 4 5 6 7 8 9
lead(1:10, 1)
#> [1] 2 3 4 5 6 7 8 9 10 NA
x <- runif(5) cbind(ahead = lead(x), x, behind = lag(x))
#> ahead x behind #> [1,] 0.3789607 0.6390610 NA #> [2,] 0.3595307 0.3789607 0.6390610 #> [3,] 0.8442314 0.3595307 0.3789607 #> [4,] 0.4567492 0.8442314 0.3595307 #> [5,] NA 0.4567492 0.8442314
# Use order_by if data not already ordered df <- data.frame(year = 2000:2005, value = (0:5) ^ 2) scrambled <- df[sample(nrow(df)), ] wrong <- mutate(scrambled, prev = lag(value)) arrange(wrong, year)
#> year value prev #> 1 2000 0 4 #> 2 2001 1 NA #> 3 2002 4 16 #> 4 2003 9 25 #> 5 2004 16 1 #> 6 2005 25 0
right <- mutate(scrambled, prev = lag(value, order_by = year)) arrange(right, year)
#> year value prev #> 1 2000 0 NA #> 2 2001 1 0 #> 3 2002 4 1 #> 4 2003 9 4 #> 5 2004 16 9 #> 6 2005 25 16