This shoudl do what you described:
gens_avg_change <- gens_avg %>% group_by(hap) %>% mutate(percent_change=(avg-lag(avg))/lag(avg)*100)