You can summarise first and then bind them to your original df, i.e.
library(tidyverse)
bind_rows(d1,
d1 %>%
group_by(name) %>%
summarise_all(funs(sum)) %>%
mutate(name = paste0(name, '_total')))
which gives,
# A tibble: 6 x 3
name `2012` `2013`
<chr> <dbl> <dbl>
1 jim 57 14
2 john 58 3
3 jim 47 3
4 john 57 90
5 jim_total 104 17
6 john_total 115 93