Agradeço a resposta. Essa estrutura não me atende por completo, pois se eu tiver registros nos meses 3 e 4 ele mantém os dois, já que estão em trimestres diferentes, mesmo com um mês de diferença.
Acabei conseguindo montar um monstro aqui, dois loops varrendo os registros um a um, mas que serviu ao que eu precisava:
teste <-
structure(list(identificador = structure(c(1L, 1L, 2L, 2L, 3L,
3L, 4L, 4L, 5L, 5L, 6L, 6L, 7L, 7L, 8L, 8L, 8L, 9L, 9L, 10L,
10L), .Label = c("1", "2", "3", "4", "5", "6", "7", "8", "9",
"10"), class = "factor"), ano = c(2016L, 2016L, 2016L, 2016L,
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L,
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L), mes = c(5L,
6L, 2L, 7L, 3L, 7L, 2L, 6L, 2L, 5L, 5L, 6L, 6L, 7L, 1L, 3L, 6L,
3L, 6L, 2L, 7L)), .Names = c("identificador", "ano", "mes"), row.names = c(NA,
21L), class = "data.frame")
### LIMPEZA ###
# Separa vetor com os nomes dos individuos onde ha duplicata no registro de temporarios
individuos <- as.character(unique(teste$identificador))
# Cria objeto que recebera a base de temporarios apos limpeza
teste_limpo <- data.frame(matrix(NA, 0, ncol(teste)))
names(teste_limpo) <- names(teste)
# Loop
for (contador in individuos) {
# Separa os registros para cada individuo
teste_individual <- subset(teste, identificador == contador)
# Loop para cada registro no individuo - comeca no primeiro registro, que sera o mais antigo dado que a base esta ordenada
i = 1
repeat {
# Descarta os casos em que a diferenca de tempo e menor que 3 meses com relacao a base
aux <- subset(teste_individual,
!(0 < teste_individual$mes-teste_individual$mes[i] &
teste_individual$mes-teste_individual$mes[i] < 3))
# Atualiza os registros do individuo
teste_individual <- aux
# Atualiza contador para voltar e pegar o proximo registro do mesmo individuo
i <- i+1
# Quando percorrer todos os registros (do individuo) remanescentes apos cada etapa da limpeza, sai do repeat
if (i >= nrow(aux)) break
}
# Apos percorrer todos os registros do individuo e executar a limpeza, agrega a base que sera a final
teste_limpo <- rbind(teste_limpo, teste_individual)
}