The OP requested completion of the years in descending order starting in 2014.
Here is an alternative approach that works without converting dates and fake dates. In addition, this approach can be modified to work with fiscal years that start on a different month than January.
# create sample dataset df <- data.frame( day = c(24L, 21L, 20L, 10L, 20L, 20L, 21L, 10L, 30L, 10L, 10L, 7L), month = c("Jun", "Mar", "Jan", "Dec", "Jun", "Jan", "Jan", "Dec", "Jan", "Jan", "Jan", "Jun")) df$year <- 2014 - cumsum(c(0L, diff(100L*as.integer( factor(df$month, levels = month.abb)) + df$day) > 0)) df
day month year 1 24 Jun 2014 2 21 Mar 2014 3 20 Jan 2014 4 10 Dec 2013 5 20 Jun 2013 6 20 Jan 2013 7 21 Jan 2012 8 10 Dec 2011 9 30 Jan 2011 10 10 Jan 2011 11 10 Jan 2011 12 7 Jun 2010
The end of fiscal years
Suppose a business decides to start its fiscal year on February 1. Thus, January is in a different fiscal year than in February or March of the same calendar year.
To cope with fiscal years, we just need to shuffle the factor levels accordingly:
df$fy <- 2014 - cumsum(c(0L, diff(100L*as.integer( factor(df$month, levels = month.abb[c(2:12, 1)])) + df$day) > 0)) df
day month year fy 1 24 Jun 2014 2014 2 21 Mar 2014 2014 3 20 Jan 2014 2013 4 10 Dec 2013 2013 5 20 Jun 2013 2013 6 20 Jan 2013 2012 7 21 Jan 2012 2011 8 10 Dec 2011 2011 9 30 Jan 2011 2010 10 10 Jan 2011 2010 11 10 Jan 2011 2010 12 7 Jun 2010 2010