Fill missing values in data.frame using dplyr complete within groups

We can try with expand and left_join

library(dplyr)
library(tidyr)
df %>%
   group_by(coursecode, year, region) %>%
   expand(week = full_seq(week, 1)) %>% 
   left_join(., df)
#   coursecode  year region  week values othervalues
#       <fctr> <dbl> <fctr> <dbl>  <int>       <int>
#1           A  2000    Big     1      1          12
#2           A  2000    Big     2     NA          NA
#3           A  2000    Big     3      2          13
#4           A  2000    Big     4      3          14
#5           A  2001    Big     1      4          15
#6           A  2001    Big     2      5          16
#7           A  2001    Big     3      6          17
#8           B  2000    Big     2      7          18
#9           B  2000    Big     3      8          19
#10          B  2000    Big     4     NA          NA
#11          B  2000    Big     5      9          20
#12          B  2001    Big     3     10          21
#13          B  2001    Big     4     11          22
#14          B  2001    Big     5     12          23