Uma possibilidade seria
# usar expand.grid para criar todas as possibilidades, depois comparar com um unique dos seus dados
#para criar suas possibilidades
possibilidades<-expand.grid(ano=seq(2013,2015,1),local=c("arg","pry","uri"))
#gerando alguns dados de exemplo, veja que ta faltando
dados<-data.frame(possibilidades[sample(1:8,30,replace=T),],medidas=rnorm(30))
#olhando os dados
dados[,1:2]
#compare com as possibilidades, não existe 2015 em uri
unique(dados[,1:2])
possibilidades
#mas como descobrir isso, uma possibilidade talvez pouco eficiente
#junte as planilhas que conseguiu com o unique e possibilidades
juntos<-rbind(unique(dados[,1:2]), possibilidades)
#agora como o duplicado é a segunda planilha, use duplicated para ver linhas duplicadas
duplicado<-duplicated(rbind(unique(dados[,1:2]), possibilidades))
#separe somente para as possibilidades, quem está duplicado(quem existe nos dados originais)
selecao<-duplicado[(nrow(unique(dados[,1:2]))+1):length(duplicado)]
#agora é so inverter a seleção, quem não existe para as possibilidades
possibilidades[!selecao,]
Deve ter funções prontas para isso, mas da para quebrar o galho assim.
Use unique por atributos e expandegrid para montar todas as possibilidades
Espero ter ajudado