Perhaps something like this.
library(tidyverse)
policy <- tibble::tribble(
~year, ~state,
2015L, "AL",
2015L, "AR",
2015L, "CA",
2015L, "CO",
2015L, "DE",
2016L, "AL",
2016L, "AR",
2016L, "CA",
2016L, "CO",
2016L, "DE",
2017L, "AL",
2017L, "AR",
2017L, "CA",
2017L, "CO",
2017L, "DE",
2018L, "AL",
2018L, "AR",
2018L, "CA",
2018L, "CO",
2018L, "DE",
2019L, "AL",
2019L, "AR",
2019L, "CA",
2019L, "CO",
2019L, "DE"
)
policy %>%
mutate(dummy = case_when(year >= 2015 & state == "AR" ~ 0,
year >= 2016 & state == "DE" ~ 0,
year >= 2017 & state == "CA" ~ 0,
TRUE ~ 1))
#> # A tibble: 25 × 3
#> year state dummy
#> <int> <chr> <dbl>
#> 1 2015 AL 1
#> 2 2015 AR 0
#> 3 2015 CA 1
#> 4 2015 CO 1
#> 5 2015 DE 1
#> 6 2016 AL 1
#> 7 2016 AR 0
#> 8 2016 CA 1
#> 9 2016 CO 1
#> 10 2016 DE 0
#> # … with 15 more rows
Created on 2021-10-11 by the reprex package (v2.0.1)