Nâo consegui rodar, veja o que deu:
 
teste <- data.frame(id=rep(1:3, each=10), ano=2016, mes=c(1:5,7,9:12,1:3,6:12,1:10))
teste[unlist(sapply(split(teste, teste$identificador), function(x)c(TRUE, unlist(diff(x$mes) >= 3)))),]
 
Erro em split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...) : 
  group length is 0 but data length > 0
 
 
Olá a todos,
 
Apliquei a solução proposta pelo Henrique na base completa e funcionou perfeitamente. A estrutura que eu tinha montado (com os dois loops) não tinha funcionado 100%, mas esta sim:
 
teste[unlist(sapply(split(teste, teste$identificador), function(x)c(TRUE, unlist(diff(x$mes) >= 3)))),]
 
Abraços e obrigado novamente.

 
Paulo Dick
Estatístico / Epidemiologia em Saúde Pública
Tel.: (55 21) 99591-2716