Edimeire, bom dia!
Não sei se exatamente isso que você precisa, mas vou arriscar um palpite...
### <code r>
require(dplyr)
head(mtcars)
df0 <- cbind(mtcars[,-c(10,8,2)], mtcars[,c(10,8,2)]); head(df0) # ordena pra facilitar
df0$cyl.lag <- NA; head(df0)
# Alternativa 1 ============================================================== #
g1 <- split(df0, df0$gear); g1 # separa com split
g2 <- lapply(g1, function(x) x[order(x$vs, x$cyl),]); g2 # ordena
### lead em g2
lapply(1:3, function(x) g2[[x]]$cyl.lag[g2[[x]]$vs==1] <<- lead(g2[[x]]$cyl[g2[[x]]$vs==1], 2))
# retorna data.frame
df1 <- do.call(rbind, g2)
df1[with(df1, which(vs==1 & cyl.lag==4)),]
# mpg disp hp drat wt qsec am carb gear vs cyl cyl.lag
# 4.Datsun 710 22.8 108.0 93 3.85 2.320 18.61 1 1 4 1 4 4
# 4.Merc 240D 24.4 146.7 62 3.69 3.190 20.00 0 2 4 1 4 4
# 4.Merc 230 22.8 140.8 95 3.92 3.150 22.90 0 2 4 1 4 4
# 4.Fiat 128 32.4 78.7 66 4.08 2.200 19.47 1 1 4 1 4 4
# 4.Honda Civic 30.4 75.7 52 4.93 1.615 18.52 1 2 4 1 4 4
# 4.Toyota Corolla 33.9 71.1 65 4.22 1.835 19.90 1 1 4 1 4 4
# Alternativa 2 ============================================================== #
df2 <- with(df0, df0[order(gear, vs, cyl),]); head(df2)
df2$cyl.lag <- NA; head(df)
for (i in sort(unique(df2$gear))) {
sel <- which(df2$gear==i & df2$vs==1)
df2$cyl.lag[sel] <- lead(df2$cyl[sel], 2) }
df2[with(df2, which(vs==1 & cyl.lag==4)),]
# mpg disp hp drat wt qsec am carb gear vs cyl cyl.lag
# Datsun 710 22.8 108.0 93 3.85 2.320 18.61 1 1 4 1 4 4
# Merc 240D 24.4 146.7 62 3.69 3.190 20.00 0 2 4 1 4 4
# Merc 230 22.8 140.8 95 3.92 3.150 22.90 0 2 4 1 4 4
# Fiat 128 32.4 78.7 66 4.08 2.200 19.47 1 1 4 1 4 4
# Honda Civic 30.4 75.7 52 4.93 1.615 18.52 1 2 4 1 4 4
# Toyota Corolla 33.9 71.1 65 4.22 1.835 19.90 1 1 4 1 4 4
### </code>