Like this?
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
input <- data.frame(var1 = c("r", "v", "f",'r','s','v'),
var2 = c("1", "4", "5",'8','1','2'),
var3=c("1","1","1","2","2","2"),
stringsAsFactors = FALSE)
input
#> var1 var2 var3
#> 1 r 1 1
#> 2 v 4 1
#> 3 f 5 1
#> 4 r 8 2
#> 5 s 1 2
#> 6 v 2 2
return_requested <- data.frame(var1 = c("1", "8"),
var2 = c("4", "2"),
var3=c("1","2"),
stringsAsFactors = FALSE)
return_requested
#> var1 var2 var3
#> 1 1 4 1
#> 2 8 2 2
return <- input %>% mutate(Lead1var1 = lead(var1, 1),
Lead2var1 = lead(var1, 2),
Lead1var2 = lead(var2, 1),
Lead2var2 = lead(var2, 2),
Lead1var3 = lead(var3, 1),
Lead2var3 = lead(var3, 2)) %>%
filter(var1 == "r",
(Lead1var1 == "v" & var3 == Lead1var3) |
(Lead2var1 == "v" & var3 == Lead2var3) ) %>%
mutate(var1 = var2,
var2 = ifelse(Lead1var1 == "v", Lead1var2, Lead2var2)) %>%
select(var1, var2, var3)
return
#> var1 var2 var3
#> 1 1 4 1
#> 2 8 2 2
Created on 2019-04-30 by the reprex package (v0.2.1)