[R-br] Criar uma coluna de lancamentos de pesca
Éder Comunello
comunello.eder em gmail.com
Quinta Maio 19 15:14:56 BRT 2016
Humberto, boa tarde!
Segue uma ideia. Fornecer dados sempre ajuda muito...
### <code r>
rm(list=ls())
setwd("D:/LAB/NOVOS")
dir(patt="csv$")
df0 <- read.csv2("dt.mapas.csv")
dup <- which(duplicated(df0)); length(dup) # 132
df <- df0[-dup,] # dados sem duplicatas
df$lance <- NA; head(df)
# tabulação cruzada
tab <- addmargins(table(df$boat, df$ano), 2, FUN=sum); tab
for (boat in unique(df$boat)) {
sel <- which(df$boat==boat)
for (ano in unique(df$ano[sel])) {
sel2 <- which(df$boat==boat & df$ano==ano)
ord <- with(df[sel2,], order(ano, mes, dia))
df[sel2[ord], "lance"] <- 1:length(sel2)
}
}
# para ajudar na conferência... comparar com tab
tmp <- aggregate(lance~ano+boat, data=df, FUN=max); tmp
write.csv2(df, "boat.txt") ### verificar o arquivo no diretório de trabalho!
### </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 19 de maio de 2016 12:05, Humberto Hazin <hhazin em gmail.com> escreveu:
> Boa tarde Eder,
>
>
>
> Mais uma vez agradeço pela disposição. Segue o link dos dados via dropbox
>
>
>
> https://www.dropbox.com/s/zulr5a9m44sv2s4/dt.mapas.csv?dl=0
>
>
>
>
>
> Humberto
>
>
>
> *De:* ecomunel em gmail.com [mailto:ecomunel em gmail.com] *Em nome de *Éder
> Comunello
> *Enviada em:* quinta-feira, 19 de maio de 2016 08:28
>
> *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, bom dia!
>
>
>
> Nesse caso você precisaria fornecer teus dados ou uma amostra deles.
> Selecione uma amostra dos teus dados e verifique se o problema se repete
> com eles. Se a amostra for pequena, pode colar a saída do comando
> dput(seudataframe) diretamente no corpo do email.
>
>
>
>
> ================================================
> É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 18 de maio de 2016 15:09, Humberto Hazin <hhazin em gmail.com> escreveu:
>
> Ola Eder,
>
>
>
> Obrigado pela dica realmente tinha 132 linhas repetidas. Entretanto,
> apareceu outro problema. Ele so esta fazendo para o primeiro barco apenas e
> não para os demais. Tens alguma ideia do que seja? No teu script com os
> dados que vc criou roda perfeitamente.
>
>
>
> Humberto
>
>
>
> *De:* ecomunel em gmail.com [mailto:ecomunel em gmail.com] *Em nome de *Éder
> Comunello
> *Enviada em:* quinta-feira, 12 de maio de 2016 17:12
>
>
> *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,
>
>
>
> É provável que seja uma linha (ou mais) em duplicidade para os 4 campos:
> boat, ano, mes e dia.
>
> ?duplicated
>
>
>
>
> ================================================
> É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 12 de maio de 2016 10:09, Humberto Hazin <hhazin em gmail.com> escreveu:
>
> 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 em gmail.com [mailto:ecomunel em gmail.com] *Em nome de *Éder
> Comunello
> *Enviada em:* quinta-feira, 12 de maio de 2016 08:23
>
>
> *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, 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/20160519/94cf57d3/attachment-0001.html>
Mais detalhes sobre a lista de discussão R-br