
Bom dia Eder, Muito obrigado pela ajuda acredito que funcionara agora. Rodei teu exemplo e deu certo, porém quando rodei nos meus dados acusou um erro. Eu vou verificar o que esse erro. De toda forma, muito obrigado! Error in `[<-.data.frame`(`*tmp*`, sel[ord], "lance", value = c(1L, 0L : replacement has 2 rows, data has 75201 Humberto De: ecomunel@gmail.com [mailto:ecomunel@gmail.com] Em nome de Éder Comunello Enviada em: quinta-feira, 12 de maio de 2016 08:23 Para: Humberto Hazin <hhazin@gmail.com> Cc: r-br@listas.c3sl.ufpr.br Assunto: Re: [R-br] Criar uma coluna de lancamentos de pesca Humberto, bom dia! Era para o script fazer isso mesmo, porque até então não havia presumido que precisaria reiniciar a contagem com a mudança do ano. Fiz outra alteração no script para atender esse critério. Via de regra, deve-se evitar aninhar instruções "for", mas acho que pode te servir como ponto de partida. Outros colegas da lista poderão te propor soluções mais elegantes... ### <code r> df <- read.table(text= "dia mes ano boat 13 1 2005 AGIOS.NIKOLAUS 10 1 2005 AGIOS.NIKOLAUS 11 1 2005 AGIOS.NIKOLAUS 12 1 2005 AGIOS.NIKOLAUS 9 1 2005 AGIOS.NIKOLAUS 10 1 2005 X 9 1 2005 X 12 1 2005 X 13 1 2005 Y 11 1 2005 Y 13 1 2006 Y 11 1 2006 Y", head=T, as.is <http://as.is> =T) df$lance <- NA df for (boat in unique(df$boat)) { for (ano in unique(df$ano)) { sel <- which(df$boat==boat & df$ano==ano) ord <- with(df[sel,], order(dia, mes, ano)) df[sel[ord], "lance"] <- 1:length(sel) } } df # dia mes ano boat lance # 1 13 1 2005 AGIOS.NIKOLAUS 5 # 2 10 1 2005 AGIOS.NIKOLAUS 2 # 3 11 1 2005 AGIOS.NIKOLAUS 3 # 4 12 1 2005 AGIOS.NIKOLAUS 4 # 5 9 1 2005 AGIOS.NIKOLAUS 1 # 6 10 1 2005 X 2 # 7 9 1 2005 X 1 # 8 12 1 2005 X 3 # 9 13 1 2005 Y 2 # 10 11 1 2005 Y 1 # 11 13 1 2006 Y 2 # 12 11 1 2006 Y 1 ### </code> ================================================ Éder Comunello Agronomist (UEM), MSc in Environ. Sciences (UEM) DSc in Agricultural Systems Engineering (USP/Esalq) Brazilian Agricultural Research Corporation (Embrapa) Dourados, MS, Brazil |<O>| ================================================ GEO, -22.2752, -54.8182, 408m UTC-04:00 / DST: UTC-03:00 Em 11 de maio de 2016 19:17, Humberto Hazin <hhazin@gmail.com <mailto:hhazin@gmail.com> > escreveu: Ola eder, Mais uma vez obrigado e desculpa te incomodar de novo o problema é que esta um pouco estranho e diferente do teu resultado. Segue abaixo a partir do ponto amarelo deveria repetir 1 2 3...e não 16 17.... set.day setyear setmonth boat lance 20404 14 1999 12 ACECHADOR 1 20422 15 1999 12 ACECHADOR 2 20403 17 1999 12 ACECHADOR 3 20467 18 1999 12 ACECHADOR 4 20466 19 1999 12 ACECHADOR 5 20465 20 1999 12 ACECHADOR 6 20473 21 1999 12 ACECHADOR 7 20469 22 1999 12 ACECHADOR 8 20468 23 1999 12 ACECHADOR 9 20475 25 1999 12 ACECHADOR 10 20470 26 1999 12 ACECHADOR 11 20471 27 1999 12 ACECHADOR 12 20472 28 1999 12 ACECHADOR 13 20474 29 1999 12 ACECHADOR 14 20476 30 1999 12 ACECHADOR 15 26605 7 2000 1 ACECHADOR 16 26592 8 2000 1 ACECHADOR 17 26601 9 2000 1 ACECHADOR 18 26603 10 2000 1 ACECHADOR 19 26589 11 2000 1 ACECHADOR 20 25991 12 2000 1 ACECHADOR 21 De: ecomunel@gmail.com <mailto:ecomunel@gmail.com> [mailto:ecomunel@gmail.com <mailto:ecomunel@gmail.com> ] Em nome de Éder Comunello Enviada em: quarta-feira, 11 de maio de 2016 18:48 Para: Humberto Hazin <hhazin@gmail.com <mailto:hhazin@gmail.com> > Cc: r-br@listas.c3sl.ufpr.br <mailto:r-br@listas.c3sl.ufpr.br> Assunto: Re: [R-br] Criar uma coluna de lancamentos de pesca Humberto, Você poderia ordenar o banco antes de rodar: df <- df[with(df, order(boat, ano, mes, dia)),] Ou modificar o código. Uma possibilidade: ### <code r> df <- read.table(text= "dia mes ano boat 13 1 2005 AGIOS.NIKOLAUS 10 1 2005 AGIOS.NIKOLAUS 11 1 2005 AGIOS.NIKOLAUS 12 1 2005 AGIOS.NIKOLAUS 9 1 2005 AGIOS.NIKOLAUS 10 1 2005 X 9 1 2005 X 12 1 2005 X 13 1 2005 Y 11 1 2005 Y", head=T, as.is <http://as.is> =T) df$lance <- NA df for (boat in unique(df$boat)) { sel <- which(df$boat==boat) ord <- with(df[sel,], order(dia, mes, ano)) df[sel[ord], "lance"] <- 1:length(sel) } df # dia mes ano boat lance # 1 13 1 2005 AGIOS.NIKOLAUS 5 # 2 10 1 2005 AGIOS.NIKOLAUS 2 # 3 11 1 2005 AGIOS.NIKOLAUS 3 # 4 12 1 2005 AGIOS.NIKOLAUS 4 # 5 9 1 2005 AGIOS.NIKOLAUS 1 # 6 10 1 2005 X 2 # 7 9 1 2005 X 1 # 8 12 1 2005 X 3 # 9 13 1 2005 Y 2 # 10 11 1 2005 Y 1 ### </code> ================================================ Éder Comunello Agronomist (UEM), MSc in Environ. Sciences (UEM) DSc in Agricultural Systems Engineering (USP/Esalq) Brazilian Agricultural Research Corporation (Embrapa) Dourados, MS, Brazil |<O>| ================================================ GEO, -22.2752, -54.8182, 408m UTC-04:00 / DST: UTC-03:00 Em 11 de maio de 2016 14:39, Humberto Hazin <hhazin@gmail.com <mailto:hhazin@gmail.com> > escreveu: Muito obrigado Rodrigo e Elder, parcialmente o problema foi resolvido, entretanto olhando o resultado abaixo do código do Elder no meu banco de dados teria que estar classificado dia mês ano barco para que a sequência de lances darem certos correto? Ou pode ser incluída no código? Olhando o exemplo que esta em amarelo por exemplo o lance 3 deveria ser o lance 2. set.day setyear setmonth boat lance 1 2 1978 8 SUMIYOSHI.MARU.32 1 2 4 1978 8 SEIKO.MARU.8 1 3 16 1978 4 SUMIYOSHI.MARU.32 2 4 13 1978 4 SUMIYOSHI.MARU.32 3 5 23 1978 9 SEIKO.MARU.8 2 6 7 1978 10 SUMIYOSHI.MARU.32 4 7 27 1978 1 SUMIYOSHI.MARU.32 5 8 10 1978 1 SUMIYOSHI.MARU.8 1 De: R-br [mailto:r-br-bounces@listas.c3sl.ufpr.br <mailto:r-br-bounces@listas.c3sl.ufpr.br> ] Em nome de Éder Comunello Enviada em: quarta-feira, 11 de maio de 2016 11:23 Para: r-br@listas.c3sl.ufpr.br <mailto:r-br@listas.c3sl.ufpr.br> Assunto: Re: [R-br] Criar uma coluna de lancamentos de pesca Humberto, bom dia! Segue uma uma sugestão, sem considerar que possa haver duplicidade... ### <code r> df <- read.table(text= "dia mes ano boat 9 1 2005 AGIOS.NIKOLAUS 10 1 2005 AGIOS.NIKOLAUS 11 1 2005 AGIOS.NIKOLAUS 12 1 2005 AGIOS.NIKOLAUS 13 1 2005 AGIOS.NIKOLAUS 9 1 2005 X 10 1 2005 X 11 1 2005 X 12 1 2005 Y 13 1 2005 Y", head=T, as.is <http://as.is> =T) df$lance <- NA df for (boat in unique(df$boat)) { sel <- which(df$boat==boat) df[sel, "lance"] <- 1:length(sel) } df # dia mes ano boat lance # 1 9 1 2005 AGIOS.NIKOLAUS 1 # 2 10 1 2005 AGIOS.NIKOLAUS 2 # 3 11 1 2005 AGIOS.NIKOLAUS 3 # 4 12 1 2005 AGIOS.NIKOLAUS 4 # 5 13 1 2005 AGIOS.NIKOLAUS 5 # 6 9 1 2005 X 1 # 7 10 1 2005 X 2 # 8 11 1 2005 X 3 # 9 12 1 2005 Y 1 # 10 13 1 2005 Y 2 ### </code> ================================================ Éder Comunello Agronomist (UEM), MSc in Environ. Sciences (UEM) DSc in Agricultural Systems Engineering (USP/Esalq) Brazilian Agricultural Research Corporation (Embrapa) Dourados, MS, Brazil |<O>| ================================================ GEO, -22.2752, -54.8182, 408m UTC-04:00 / DST: UTC-03:00 Em 11 de maio de 2016 09:37, Humberto Hazin <hhazin@gmail.com <mailto:hhazin@gmail.com> > escreveu: Olá pessoal, Estou precisando criar uma coluna chamada lances. Onde cada lance corresponde a um dia, mês, ano e barco conforme o exemplo abaixo: dia mes ano boat 9 1 2005 AGIOS.NIKOLAUS 10 1 2005 AGIOS.NIKOLAUS 11 1 2005 AGIOS.NIKOLAUS 12 1 2005 AGIOS.NIKOLAUS 13 1 2005 AGIOS.NIKOLAUS Eu gostaria que a tabela ficasse dessa forma aqui dia mes ano boat Lance 9 1 2005 AGIOS.NIKOLAUS 1 10 1 2005 AGIOS.NIKOLAUS 2 11 1 2005 AGIOS.NIKOLAUS 3 12 1 2005 AGIOS.NIKOLAUS 4 13 1 2005 AGIOS.NIKOLAUS 5 Agradeço desde já Humberto _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto:R-br@listas.c3sl.ufpr.br> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.