<div dir="ltr">Olá Eder,<div><br></div><div>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.</div><div><br></div><div>Acabei conseguindo montar um monstro aqui, dois loops varrendo os registros um a um, mas que serviu ao que eu precisava:</div><div><br></div><div><div>teste <-</div><div>structure(list(identificador = structure(c(1L, 1L, 2L, 2L, 3L, </div><div> 3L, 4L, 4L, 5L, 5L, 6L, 6L, 7L, 7L, 8L, 8L, 8L, 9L, 9L, 10L, </div><div> 10L), .Label = c("1", "2", "3", "4", "5", "6", "7", "8", "9", </div><div> "10"), class = "factor"), ano = c(2016L, 2016L, 2016L, 2016L, </div><div> 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, </div><div> 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L), mes = c(5L, </div><div> 6L, 2L, 7L, 3L, 7L, 2L, 6L, 2L, 5L, 5L, 6L, 6L, 7L, 1L, 3L, 6L, </div><div> 3L, 6L, 2L, 7L)), .Names = c("identificador", "ano", "mes"), row.names = c(NA, </div><div> 21L), class = "data.frame")</div><div><br></div><div>### LIMPEZA ###</div><div><br></div><div># Separa vetor com os nomes dos individuos onde ha duplicata no registro de temporarios</div><div>individuos <- as.character(unique(teste$identificador))</div><div><br></div><div># Cria objeto que recebera a base de temporarios apos limpeza</div><div>teste_limpo <- data.frame(matrix(NA, 0, ncol(teste)))</div><div>names(teste_limpo) <- names(teste)</div><div><br></div><div># Loop</div><div>for (contador in individuos) {</div><div> </div><div> # Separa os registros para cada individuo</div><div> teste_individual <- subset(teste, identificador == contador)</div><div> </div><div> # Loop para cada registro no individuo - comeca no primeiro registro, que sera o mais antigo dado que a base esta ordenada</div><div> i = 1</div><div> </div><div> repeat {</div><div> </div><div> # Descarta os casos em que a diferenca de tempo e menor que 3 meses com relacao a base</div><div> aux <- subset(teste_individual,</div><div> !(0 < teste_individual$mes-teste_individual$mes[i] &</div><div> teste_individual$mes-teste_individual$mes[i] < 3))</div><div> </div><div> # Atualiza os registros do individuo</div><div> teste_individual <- aux</div><div> </div><div> # Atualiza contador para voltar e pegar o proximo registro do mesmo individuo</div><div> i <- i+1</div><div> </div><div> # Quando percorrer todos os registros (do individuo) remanescentes apos cada etapa da limpeza, sai do repeat</div><div> if (i >= nrow(aux)) break</div><div> }</div><div> </div><div> # Apos percorrer todos os registros do individuo e executar a limpeza, agrega a base que sera a final</div><div> teste_limpo <- rbind(teste_limpo, teste_individual)</div><div> </div><div>}</div></div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><b><br></b></div><div dir="ltr"><b>Paulo Dick</b><div>Estatístico / <span style="font-size:12.8px">Epidemiologia em Saúde Pública</span></div><div>Tel.: (55 21) 99591-2716</div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">Em 29 de julho de 2016 10:20, Éder Comunello <span dir="ltr"><<a href="mailto:comunello.eder@gmail.com" target="_blank">comunello.eder@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">Paulo, bom dia!<br></div><div class="gmail_default" style="font-family:verdana,sans-serif"><br># Uma alternativa é identificar o trimestre de cada observação...<br><span style="font-family:monospace,monospace">dat <- data.frame(id=rep(1:4, 6:3), ano=2016, mes=c(1,2,3,5,6,10,3,7,8,11,12,2,5,9,12,1,3,4))<br>dat$tri <- ceiling(dat$mes/4)+1</span><br><br># E preservar somente a mais antiga dentro de cada trimestre...<br><span style="font-family:monospace,monospace">del <- which(duplicated(dat[,c(1,2,4)]))<br>dat[-del,] # dados que permanecem<br>dat[del,] # dados retirados</span><br></div></div><div class="gmail_extra"><br clear="all"><div><div data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><span><br>================================================<br>Éder Comunello<br>Researcher at Brazilian Agricultural Research Corporation (Embrapa)<br>DSc in Agricultural Systems Engineering (USP/Esalq)<br>MSc in Environ. Sciences (UEM), <span>Agronomist (UEM)</span><br>---<br>Embrapa Agropecuária Oeste, Dourados, MS, Brazil |<O>|<br>================================================<br>GEO, -22.2752, -54.8182, 408m<br>UTC-04:00 / DST: UTC-03:00</span><div><div><div><br></div><div><br></div></div><div style="font-size:small"><br></div></div></div></div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote"><div><div class="h5">Em 27 de julho de 2016 09:07, Paulo Dick via R-br <span dir="ltr"><<a href="mailto:r-br@listas.c3sl.ufpr.br" target="_blank">r-br@listas.c3sl.ufpr.br</a>></span> escreveu:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">Companheiros, bom dia.<div><br></div><div>Gostaria que me ajudassem na solução do seguinte problema:</div><div><br></div><div>Tenho uma base que possui mais de um registro por indivíduo, que preciso fazer uma limpeza a partir das variáveis mês e ano. Preciso retirar apenas os registros que possuem intervalo de tempo menor que 3 meses entre eles, priorizando os registros mais antigos. Ou seja, se tenho 4 registros para um mesmo indivíduo, nos meses 1, 3, 5 e 6 (mesmo ano), fico com as linhas dos meses 1 e 5, e excluo a linha dos meses 3 e 6.</div><div><br></div><div>Segue sintaxe para gerar fragmento extraído desta base:<br></div><div><div><font face="monospace, monospace">structure(list(identificador = structure(c(1L, 1L, 2L, 2L, 3L, </font></div><div><font face="monospace, monospace">3L, 4L, 4L, 5L, 5L, 6L, 6L, 7L, 7L, 8L, 8L, 8L, 9L, 9L, 10L, </font></div><div><font face="monospace, monospace">10L), .Label = c("1", "2", "3", "4", "5", "6", "7", "8", "9", </font></div><div><font face="monospace, monospace">"10"), class = "factor"), ano = c(2016L, 2016L, 2016L, 2016L, </font></div><div><font face="monospace, monospace">2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, </font></div><div><font face="monospace, monospace">2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L), mes = c(5L, </font></div><div><font face="monospace, monospace">6L, 2L, 7L, 3L, 7L, 2L, 6L, 2L, 5L, 5L, 6L, 6L, 7L, 1L, 3L, 6L, </font></div><div><font face="monospace, monospace">3L, 6L, 2L, 7L)), .Names = c("identificador", "ano", "mes"), row.names = c(NA, </font></div><div><font face="monospace, monospace">21L), class = "data.frame")</font></div></div><div><br></div><div>Agradeço pela ajuda.</div><div><br></div><div>Abraços</div><div><div><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><b><br></b></div><div dir="ltr"><b>Paulo Dick</b><div>Estatístico / <span style="font-size:12.8px">Epidemiologia em Saúde Pública</span></div><div>Tel.: (55 21) 99591-2716</div></div></div></div></div></div></div></div></div>
</div></div>
<br></div></div>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" rel="noreferrer" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" rel="noreferrer" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div><br></div>
</blockquote></div><br></div>