[R-br] Criar uma coluna de lancamentos de pesca

Éder Comunello comunello.eder em gmail.com
Quinta Maio 12 08:23:23 BRT 2016


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=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 em 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 em gmail.com [mailto:ecomunel em gmail.com] *Em nome de *Éder
> Comunello
> *Enviada em:* quarta-feira, 11 de maio de 2016 18:48
> *Para:* Humberto Hazin <hhazin em gmail.com>
> *Cc:* r-br em 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=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 em 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 em listas.c3sl.ufpr.br] *Em nome de *Éder
> Comunello
> *Enviada em:* quarta-feira, 11 de maio de 2016 11:23
> *Para:* r-br em 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=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 em 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 em 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.
>
>
>
>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160512/3eb19407/attachment.html>


Mais detalhes sobre a lista de discussão R-br