Calculate number of years worked with different end dates

base R

You should use Reduce with accumulate = T.

df2$employment_history <- apply(df2[,-1], 1, function(x) sum(!Reduce(any, x==0, accumulate = TRUE)))
merge(df1, df2[c("id","employment_history")])

dplyr

Or use the built-in dplyr::cumany function:

df2 %>% 
  pivot_longer(-id) %>% 
  group_by(id) %>% 
  summarise(employment_history = sum(value[!cumany(value == 0)])) %>% 
  left_join(df1, .)

Output

    id   start_UI employment_history
1 R005 2012-06-10                  2
2 R006 2013-01-15                  3
3 R007 2014-12-21                  5