se entendi bem

df1 <- expand.grid(unique(df$ano),unique(df$ido),unique(df$idd),unique(df$code))
df3 <- merge(df1,df,by=c('ano','ido','idd','code'),all.x=T)
df3$valor[is.na(df3$valor)] <- 0


​​