[R-br] Classificar um conjunto de dados

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

[R-br] Classificar um conjunto de dados

R-br mailing list
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
local frequencia data quantidade valido
A 2 13/05/2015 500,00 0
A 2 13/05/2015 700,00 1
A 1 13/05/2015 700,00 0
B 3 13/05/2015 400,00 1
C 5 13/05/2015 300,00 0
C 5 10/05/2015 400,00 0
C 5 13/05/2016 400,00 1
C 5 13/05/2015 900,00 1
D 3 13/05/2015 550,00 0
D 4 13/05/2015 500,00 1

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

[R-br] Assunto: Classificar um conjunto de dados

R-br mailing list
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
local frequencia data quantidade valido
A 2 13/05/2015 500,00 0
A 2 13/05/2015 700,00 1
A 1 13/05/2015 700,00 0
B 3 13/05/2015 400,00 1
C 5 13/05/2015 300,00 0
C 5 10/05/2015 400,00 0
C 5 13/05/2016 400,00 1
C 5 13/05/2015 900,00 1
D 3 13/05/2015 550,00 0
D 4 13/05/2015 500,00 1

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
[hidden email]
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.

_______________________________________________
R-br mailing list
[hidden email]
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.

Untitled (338 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [R-br] Assunto: Classificar um conjunto de dados

R-br mailing list
Bom dia colegas listeiros,

Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos. 
Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento. 

aggregate(dados$local, by = list(dados$data), 'função')   

Desde já, agradeço pela ajuda de todos! 

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <[hidden email]> escreveu:
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
local frequencia data quantidade valido
A 2 13/05/2015 500,00 0
A 2 13/05/2015 700,00 1
A 1 13/05/2015 700,00 0
B 3 13/05/2015 400,00 1
C 5 13/05/2015 300,00 0
C 5 10/05/2015 400,00 0
C 5 13/05/2016 400,00 1
C 5 13/05/2015 900,00 1
D 3 13/05/2015 550,00 0
D 4 13/05/2015 500,00 1

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

Re: [R-br] Assunto: Classificar um conjunto de dados

R-br mailing list
Uma opção eh usar Uma estrutura de repetição para checar as variaveis e retornar o valor q deseja

Daniel

On Wed, 7 Nov 2018, 09:22 Yury Duarte por (R-br) <[hidden email] wrote:
Bom dia colegas listeiros,

Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos. 
Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento. 

aggregate(dados$local, by = list(dados$data), 'função')   

Desde já, agradeço pela ajuda de todos! 

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <[hidden email]> escreveu:
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
local frequencia data quantidade valido
A 2 13/05/2015 500,00 0
A 2 13/05/2015 700,00 1
A 1 13/05/2015 700,00 0
B 3 13/05/2015 400,00 1
C 5 13/05/2015 300,00 0
C 5 10/05/2015 400,00 0
C 5 13/05/2016 400,00 1
C 5 13/05/2015 900,00 1
D 3 13/05/2015 550,00 0
D 4 13/05/2015 500,00 1

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

Re: [R-br] Assunto: Classificar um conjunto de dados

R-br mailing list
In reply to this post by R-br mailing list
Yuri,

Talvez fornecer um conjunto de dados com o qual possamos trabalhar (e como sugerido no guia de postagem - http://www.leg.ufpr.br/doku.php/software:rbr?&#guia_de_postagem_da_r-br_em_construcao ) te ajude a encontrar pessoas mais dispostas a te ajudarem.

- fornecer CMR (código mínimo reproduzível), devidamente comentado e organizado com relação às dúvidas, passos, objetivos, desde a importação do arquivo à chamada de pacotes e aplicação das funções. Se a discussão é sobre a saída da função, cole na integra dentro do corpo da mensagem. Nestes casos, usar fonte monoespaçadas para preservar a estrutura do código. Em alguns casos forneça o sessionInfo(). Estamos para ajudar e não fazer todo o seu trabalho!

- caso você precise fornecer dados, considere a opção de hospeda-los em algum site (e.g. http://www.datafilehost.com/ é grátis e não requer registro) e fornecer o link para importação dos dados, de preferência dentro do próprio CMR (e.g. read.table("http://www.datafilehost.com/get.php?file=3f373ba4", …)). Mais maneiras de armazenar dados na internet http://www.freewebspace.net/free/Free-file-hosting
--
Marcus Nunes
Professor Adjunto
Universidade Federal do Rio Grande do Norte
Centro de Ciências Exatas e da Terra
Departamento de Estatística
Laboratório de Estatística Aplicada



On Wed, Nov 7, 2018 at 8:22 AM Yury Duarte por (R-br) <[hidden email]> wrote:
Bom dia colegas listeiros,

Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos. 
Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento. 

aggregate(dados$local, by = list(dados$data), 'função')   

Desde já, agradeço pela ajuda de todos! 

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <[hidden email]> escreveu:
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
local frequencia data quantidade valido
A 2 13/05/2015 500,00 0
A 2 13/05/2015 700,00 1
A 1 13/05/2015 700,00 0
B 3 13/05/2015 400,00 1
C 5 13/05/2015 300,00 0
C 5 10/05/2015 400,00 0
C 5 13/05/2016 400,00 1
C 5 13/05/2015 900,00 1
D 3 13/05/2015 550,00 0
D 4 13/05/2015 500,00 1

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

Re: [R-br] Assunto: Classificar um conjunto de dados

R-br mailing list
In reply to this post by R-br mailing list
Olá Daniel!

Utilizei a abordagem que você sugeriu e criei dois laços para fazer a checagem.
Ainda não está exatamente como gostaria mas o filtro já está sendo feito da maneira que preciso.
Segue a estrutura utilizada. 

Obrigado!

Abraços

dados:
area_id dia mes  ano frequencia valor
a  15   12 2012         10     5
a  22   12 2012         15    10
a  15   12 2012         12    15
a  24   11 2013         15    20
b   8   12 2013         10     5
b  14   10 2012         12    10
c   7   11 2012         15     5
c  19   11 2013         12    10
c  19   10 2014         12    15
c  19   10 2013         15    20
d   5   10 2014         10     5
d  23   10 2014         10    10
d   5   12 2012         10    15
d   5   12 2012         15    20
d   5   12 2013         12    25
d   6   11 2014         12    30

estrutura:
#--------------------Remover Objetos do R--------------------#
rm(list = ls())
set.seed(29031989)

raiz = 'C:\\Users\\Desktop\\'
a = read.table(paste0(raiz, 'teste_classificacao_final.txt'), header = T, sep = '\t')
colunas = colnames(a)
locais = data.frame(unique(a$area_id))

for (i in 1:length(locais[,1])){
  #nome = paste0("area_", locais[i,1])
  #area = assign(nome, a[which(a$area_id==locais[i,1]),])
  area = a[which(a$area_id==locais[i,1]),]
  anos = data.frame(unique(area$ano))
  
  for (x in 1:length(anos[,1])) {
    area_ano = area[which(area$ano==anos[x,1]),]
    frequencia_max = max(area_ano$frequencia)
    valor_max = max(area_ano$valor)
    area_ano_freq = area_ano[which(area_ano$frequencia==frequencia_max),]
    area_ano_freq_val = area_ano_freq[which(area_ano_freq$frequencia==frequencia_max),]
    
    write.table(area_ano_freq_val, paste0(raiz, 'teste', '.txt'), sep = "\t", append = T, col.names = F, row.names = F)
    
  }
}

b = read.table(paste0(raiz, 'teste.txt'), header = F, sep = '\t')
colnames(b) = colunas

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em qua, 7 de nov de 2018 às 09:26, Daniel Guimarães Tiezzi por (R-br) <[hidden email]> escreveu:
Uma opção eh usar Uma estrutura de repetição para checar as variaveis e retornar o valor q deseja

Daniel

On Wed, 7 Nov 2018, 09:22 Yury Duarte por (R-br) <[hidden email] wrote:
Bom dia colegas listeiros,

Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos. 
Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento. 

aggregate(dados$local, by = list(dados$data), 'função')   

Desde já, agradeço pela ajuda de todos! 

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <[hidden email]> escreveu:
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
local frequencia data quantidade valido
A 2 13/05/2015 500,00 0
A 2 13/05/2015 700,00 1
A 1 13/05/2015 700,00 0
B 3 13/05/2015 400,00 1
C 5 13/05/2015 300,00 0
C 5 10/05/2015 400,00 0
C 5 13/05/2016 400,00 1
C 5 13/05/2015 900,00 1
D 3 13/05/2015 550,00 0
D 4 13/05/2015 500,00 1

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

Re: [R-br] Assunto: Classificar um conjunto de dados

R-br mailing list
Cara criei esse comando que aproxima bem do que você deseja,
Porém a última situaçao (Local=D) não estou conseguindo programar, veja se tem alguma idéia que possa complementar.

att

dados<-data.frame(Local=c('A','A','A','B','C','C','C','C','D','D'),Frequencia=c(2,2,1,3,5,5,5,5,3,4),Data=c("13/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015","10/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015"),qtde=c(500,700,700,400,300,400,400,900,550,500))
dados$Data <-as.Date(dados$Data,"%d/%m/%Y")
str(dados)
dados

# install.packages("plyr")
library(plyr)

arranjo<-function(x){
valido <- c()
for(i in 1:nrow(x)){
if(x[i,2]==max(x[,2])){
valido[i]<-1
if( x[i,3]>= max(x[,3]) & x[i,2]==max(x[,2])){

valido[i] <-1
}else{

valido[i] <- 0

}
if(x[i,4]>= max(x[,4])){
valido[i] <- 1
}else{

valido[i] <- 0
}
}else{
valido[i]=0
}
}
return(mutate(x,valido=valido))
}

ddply(dados,.(Local, Data),arranjo)




On Nov 7 2018, at 11:29 am, Yury Duarte por (R-br) <[hidden email]> wrote:

Olá Daniel!

Utilizei a abordagem que você sugeriu e criei dois laços para fazer a checagem.
Ainda não está exatamente como gostaria mas o filtro já está sendo feito da maneira que preciso.
Segue a estrutura utilizada. 

Obrigado!

Abraços

dados:
area_id dia mes  ano frequencia valor
a  15   12 2012         10     5
a  22   12 2012         15    10
a  15   12 2012         12    15
a  24   11 2013         15    20
b   8   12 2013         10     5
b  14   10 2012         12    10
c   7   11 2012         15     5
c  19   11 2013         12    10
c  19   10 2014         12    15
c  19   10 2013         15    20
d   5   10 2014         10     5
d  23   10 2014         10    10
d   5   12 2012         10    15
d   5   12 2012         15    20
d   5   12 2013         12    25
d   6   11 2014         12    30

estrutura:
#--------------------Remover Objetos do R--------------------#
rm(list = ls())
set.seed(29031989)

raiz = 'C:\\Users\\Desktop\\'
a = read.table(paste0(raiz, 'teste_classificacao_final.txt'), header = T, sep = '\t')
colunas = colnames(a)
locais = data.frame(unique(a$area_id))

for (i in 1:length(locais[,1])){
  #nome = paste0("area_", locais[i,1])
  #area = assign(nome, a[which(a$area_id==locais[i,1]),])
  area = a[which(a$area_id==locais[i,1]),]
  anos = data.frame(unique(area$ano))
  
  for (x in 1:length(anos[,1])) {
    area_ano = area[which(area$ano==anos[x,1]),]
    frequencia_max = max(area_ano$frequencia)
    valor_max = max(area_ano$valor)
    area_ano_freq = area_ano[which(area_ano$frequencia==frequencia_max),]
    area_ano_freq_val = area_ano_freq[which(area_ano_freq$frequencia==frequencia_max),]
    
    write.table(area_ano_freq_val, paste0(raiz, 'teste', '.txt'), sep = "\t", append = T, col.names = F, row.names = F)
    
  }
}

b = read.table(paste0(raiz, 'teste.txt'), header = F, sep = '\t')
colnames(b) = colunas

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em qua, 7 de nov de 2018 às 09:26, Daniel Guimarães Tiezzi por (R-br) <[hidden email]> escreveu:
Uma opção eh usar Uma estrutura de repetição para checar as variaveis e retornar o valor q deseja

Daniel

On Wed, 7 Nov 2018, 09:22 Yury Duarte por (R-br) <[hidden email] wrote:
Bom dia colegas listeiros,

Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos. 
Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento. 

aggregate(dados$local, by = list(dados$data), 'função')   

Desde já, agradeço pela ajuda de todos! 

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <[hidden email]> escreveu:
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
local frequencia data quantidade valido
A 2 13/05/2015 500,00 0
A 2 13/05/2015 700,00 1
A 1 13/05/2015 700,00 0
B 3 13/05/2015 400,00 1
C 5 13/05/2015 300,00 0
C 5 10/05/2015 400,00 0
C 5 13/05/2016 400,00 1
C 5 13/05/2015 900,00 1
D 3 13/05/2015 550,00 0
D 4 13/05/2015 500,00 1

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
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.

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

Re: [R-br] Assunto: Classificar um conjunto de dados

R-br mailing list
###################CONTAGEM DE DOADORES###########################
#COM ESSA ROTINA ABAIXO, VC ORDENA DO MAIOR PARA O MAIOR AS DUAS VARIÁVEIS
d_cad0_10<- tip_doa[order(tip_doa$NUMEROGENTE,tip_doa$DATAHORADOACAO, decreasing=TRUE) ,]

NA ROTINA ABAIXO VC MANTEM AS DUPLICADAS E MANTEM SOMENTE A DE MAIOR FREQUÊNCIA
dc_0_10<- d_cad0_10[!duplicated(d_cad0_10$NUMEROGENTE),]


USEI ESSA ROTINA EM UM BANCO DE DOADORES AQUI DE MANAUS PARA MANTER SOMENTE SOMENTE ELE UMA VEZ, E COMO ORDENEI ELE MANTINHA O PRIMEIRO REGISTRO DOS DUPLICADOS E O PRIMEIRO ERA O DE MAIOR FREQUÊNCIA. ACHO QUE ERA ISSO.

TESTE ESSA.



[  ]'s
Prof. Edson Lira, Me
Estatístico
Manaus-Amazonas


Em quinta-feira, 8 de novembro de 2018 18:29:43 AMT, Fernando Souza por (R-br) <[hidden email]> escreveu:


Cara criei esse comando que aproxima bem do que você deseja,
Porém a última situaçao (Local=D) não estou conseguindo programar, veja se tem alguma idéia que possa complementar.

att

dados<-data.frame(Local=c('A','A','A','B','C','C','C','C','D','D'),Frequencia=c(2,2,1,3,5,5,5,5,3,4),Data=c("13/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015","10/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015"),qtde=c(500,700,700,400,300,400,400,900,550,500))
dados$Data <-as.Date(dados$Data,"%d/%m/%Y")
str(dados)
dados

# install.packages("plyr")
library(plyr)

arranjo<-function(x){
valido <- c()
for(i in 1:nrow(x)){
if(x[i,2]==max(x[,2])){
valido[i]<-1
if( x[i,3]>= max(x[,3]) & x[i,2]==max(x[,2])){

valido[i] <-1
}else{

valido[i] <- 0

}
if(x[i,4]>= max(x[,4])){
valido[i] <- 1
}else{

valido[i] <- 0
}
}else{
valido[i]=0
}
}
return(mutate(x,valido=valido))
}

ddply(dados,.(Local, Data),arranjo)




On Nov 7 2018, at 11:29 am, Yury Duarte por (R-br) <[hidden email]> wrote:

Olá Daniel!

Utilizei a abordagem que você sugeriu e criei dois laços para fazer a checagem.
Ainda não está exatamente como gostaria mas o filtro já está sendo feito da maneira que preciso.
Segue a estrutura utilizada. 

Obrigado!

Abraços

dados:
area_id dia mes  ano frequencia valor
a  15   12 2012         10     5
a  22   12 2012         15    10
a  15   12 2012         12    15
a  24   11 2013         15    20
b   8   12 2013         10     5
b  14   10 2012         12    10
c   7   11 2012         15     5
c  19   11 2013         12    10
c  19   10 2014         12    15
c  19   10 2013         15    20
d   5   10 2014         10     5
d  23   10 2014         10    10
d   5   12 2012         10    15
d   5   12 2012         15    20
d   5   12 2013         12    25
d   6   11 2014         12    30

estrutura:
#--------------------Remover Objetos do R--------------------#
rm(list = ls())
set.seed(29031989)

raiz = 'C:\\Users\\Desktop\\'
a = read.table(paste0(raiz, 'teste_classificacao_final.txt'), header = T, sep = '\t')
colunas = colnames(a)
locais = data.frame(unique(a$area_id))

for (i in 1:length(locais[,1])){
  #nome = paste0("area_", locais[i,1])
  #area = assign(nome, a[which(a$area_id==locais[i,1]),])
  area = a[which(a$area_id==locais[i,1]),]
  anos = data.frame(unique(area$ano))
  
  for (x in 1:length(anos[,1])) {
    area_ano = area[which(area$ano==anos[x,1]),]
    frequencia_max = max(area_ano$frequencia)
    valor_max = max(area_ano$valor)
    area_ano_freq = area_ano[which(area_ano$frequencia==frequencia_max),]
    area_ano_freq_val = area_ano_freq[which(area_ano_freq$frequencia==frequencia_max),]
    
    write.table(area_ano_freq_val, paste0(raiz, 'teste', '.txt'), sep = "\t", append = T, col.names = F, row.names = F)
    
  }
}

b = read.table(paste0(raiz, 'teste.txt'), header = F, sep = '\t')
colnames(b) = colunas

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em qua, 7 de nov de 2018 às 09:26, Daniel Guimarães Tiezzi por (R-br) <[hidden email]> escreveu:
Uma opção eh usar Uma estrutura de repetição para checar as variaveis e retornar o valor q deseja

Daniel

On Wed, 7 Nov 2018, 09:22 Yury Duarte por (R-br) <[hidden email] wrote:
Bom dia colegas listeiros,

Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos. 
Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento. 

aggregate(dados$local, by = list(dados$data), 'função')   

Desde já, agradeço pela ajuda de todos! 

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <[hidden email]> escreveu:
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
localfrequenciadataquantidadevalido
A213/05/2015500,000
A213/05/2015700,001
A113/05/2015700,000
B313/05/2015400,001
C513/05/2015300,000
C510/05/2015400,000
C513/05/2016400,001
C513/05/2015900,001
D313/05/2015550,000
D413/05/2015500,001

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
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.
_______________________________________________
R-br mailing list
[hidden email]
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.

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

Re: [R-br] Assunto: Classificar um conjunto de dados

R-br mailing list
Com os dados estruturados pelo Fernando, tentei com 2 alternativas:

# versão com tidyverse
library(dplyr); library(lubridate)
res_dplyr <- dados %>%
  group_by(ano = year(Data), Local) %>%
  arrange(desc(Frequencia), desc(Data), desc(qtde)) %>%
  slice(1) %>%
  ungroup()
res_dplyr

# versão base do R
res_base <- lapply(
  split(dados, f = list(dados$Local, year(dados$Data))),
  function(x) {
    o <- with(x, order(Frequencia, Data, qtde, decreasing = TRUE))
    x[o, ][1, ]
  }
)
res_base <- do.call(rbind, res_base)
res_base

Att.

On Thu, Nov 8, 2018 at 9:47 PM Edson Lira por (R-br) <[hidden email]> wrote:
###################CONTAGEM DE DOADORES###########################
#COM ESSA ROTINA ABAIXO, VC ORDENA DO MAIOR PARA O MAIOR AS DUAS VARIÁVEIS
d_cad0_10<- tip_doa[order(tip_doa$NUMEROGENTE,tip_doa$DATAHORADOACAO, decreasing=TRUE) ,]

NA ROTINA ABAIXO VC MANTEM AS DUPLICADAS E MANTEM SOMENTE A DE MAIOR FREQUÊNCIA
dc_0_10<- d_cad0_10[!duplicated(d_cad0_10$NUMEROGENTE),]


USEI ESSA ROTINA EM UM BANCO DE DOADORES AQUI DE MANAUS PARA MANTER SOMENTE SOMENTE ELE UMA VEZ, E COMO ORDENEI ELE MANTINHA O PRIMEIRO REGISTRO DOS DUPLICADOS E O PRIMEIRO ERA O DE MAIOR FREQUÊNCIA. ACHO QUE ERA ISSO.

TESTE ESSA.



[  ]'s
Prof. Edson Lira, Me
Estatístico
Manaus-Amazonas


Em quinta-feira, 8 de novembro de 2018 18:29:43 AMT, Fernando Souza por (R-br) <[hidden email]> escreveu:


Cara criei esse comando que aproxima bem do que você deseja,
Porém a última situaçao (Local=D) não estou conseguindo programar, veja se tem alguma idéia que possa complementar.

att

dados<-data.frame(Local=c('A','A','A','B','C','C','C','C','D','D'),Frequencia=c(2,2,1,3,5,5,5,5,3,4),Data=c("13/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015","10/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015"),qtde=c(500,700,700,400,300,400,400,900,550,500))
dados$Data <-as.Date(dados$Data,"%d/%m/%Y")
str(dados)
dados

# install.packages("plyr")
library(plyr)

arranjo<-function(x){
valido <- c()
for(i in 1:nrow(x)){
if(x[i,2]==max(x[,2])){
valido[i]<-1
if( x[i,3]>= max(x[,3]) & x[i,2]==max(x[,2])){

valido[i] <-1
}else{

valido[i] <- 0

}
if(x[i,4]>= max(x[,4])){
valido[i] <- 1
}else{

valido[i] <- 0
}
}else{
valido[i]=0
}
}
return(mutate(x,valido=valido))
}

ddply(dados,.(Local, Data),arranjo)




On Nov 7 2018, at 11:29 am, Yury Duarte por (R-br) <[hidden email]> wrote:

Olá Daniel!

Utilizei a abordagem que você sugeriu e criei dois laços para fazer a checagem.
Ainda não está exatamente como gostaria mas o filtro já está sendo feito da maneira que preciso.
Segue a estrutura utilizada. 

Obrigado!

Abraços

dados:
area_id dia mes  ano frequencia valor
a  15   12 2012         10     5
a  22   12 2012         15    10
a  15   12 2012         12    15
a  24   11 2013         15    20
b   8   12 2013         10     5
b  14   10 2012         12    10
c   7   11 2012         15     5
c  19   11 2013         12    10
c  19   10 2014         12    15
c  19   10 2013         15    20
d   5   10 2014         10     5
d  23   10 2014         10    10
d   5   12 2012         10    15
d   5   12 2012         15    20
d   5   12 2013         12    25
d   6   11 2014         12    30

estrutura:
#--------------------Remover Objetos do R--------------------#
rm(list = ls())
set.seed(29031989)

raiz = 'C:\\Users\\Desktop\\'
a = read.table(paste0(raiz, 'teste_classificacao_final.txt'), header = T, sep = '\t')
colunas = colnames(a)
locais = data.frame(unique(a$area_id))

for (i in 1:length(locais[,1])){
  #nome = paste0("area_", locais[i,1])
  #area = assign(nome, a[which(a$area_id==locais[i,1]),])
  area = a[which(a$area_id==locais[i,1]),]
  anos = data.frame(unique(area$ano))
  
  for (x in 1:length(anos[,1])) {
    area_ano = area[which(area$ano==anos[x,1]),]
    frequencia_max = max(area_ano$frequencia)
    valor_max = max(area_ano$valor)
    area_ano_freq = area_ano[which(area_ano$frequencia==frequencia_max),]
    area_ano_freq_val = area_ano_freq[which(area_ano_freq$frequencia==frequencia_max),]
    
    write.table(area_ano_freq_val, paste0(raiz, 'teste', '.txt'), sep = "\t", append = T, col.names = F, row.names = F)
    
  }
}

b = read.table(paste0(raiz, 'teste.txt'), header = F, sep = '\t')
colnames(b) = colunas

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em qua, 7 de nov de 2018 às 09:26, Daniel Guimarães Tiezzi por (R-br) <[hidden email]> escreveu:
Uma opção eh usar Uma estrutura de repetição para checar as variaveis e retornar o valor q deseja

Daniel

On Wed, 7 Nov 2018, 09:22 Yury Duarte por (R-br) <[hidden email] wrote:
Bom dia colegas listeiros,

Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos. 
Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento. 

aggregate(dados$local, by = list(dados$data), 'função')   

Desde já, agradeço pela ajuda de todos! 

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <[hidden email]> escreveu:
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
localfrequenciadataquantidadevalido
A213/05/2015500,000
A213/05/2015700,001
A113/05/2015700,000
B313/05/2015400,001
C513/05/2015300,000
C510/05/2015400,000
C513/05/2016400,001
C513/05/2015900,001
D313/05/2015550,000
D413/05/2015500,001

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
_______________________________________________
R-br mailing list
[hidden email]
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.
_______________________________________________
R-br mailing list
[hidden email]
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.


--
###############################################################
##  Jônatan Dupont Tatsch
##  Professor do Departamento de Física
##  Centro de Ciências Exatas e Naturais (CCNE)
##  Universidade Federal de Santa Maria - UFSM
##  Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900
##  Telefone: +55(55)33012083
###############################################################

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

Re: [R-br] Assunto: Classificar um conjunto de dados

R-br mailing list

Muito boa solução.!

On Nov 9 2018, at 7:54 pm, Jônatan por (R-br) <[hidden email]> wrote:

Com os dados estruturados pelo Fernando, tentei com 2 alternativas:

# versão com tidyverse
library(dplyr); library(lubridate)
res_dplyr <- dados %>%
  group_by(ano = year(Data), Local) %>%
  arrange(desc(Frequencia), desc(Data), desc(qtde)) %>%
  slice(1) %>%
  ungroup()
res_dplyr

# versão base do R
res_base <- lapply(
  split(dados, f = list(dados$Local, year(dados$Data))),
  function(x) {
    o <- with(x, order(Frequencia, Data, qtde, decreasing = TRUE))
    x[o, ][1, ]
  }
)
res_base <- do.call(rbind, res_base)
res_base

Att.

On Thu, Nov 8, 2018 at 9:47 PM Edson Lira por (R-br) <[hidden email]> wrote:
###################CONTAGEM DE DOADORES###########################
#COM ESSA ROTINA ABAIXO, VC ORDENA DO MAIOR PARA O MAIOR AS DUAS VARIÁVEIS
d_cad0_10<- tip_doa[order(tip_doa$NUMEROGENTE,tip_doa$DATAHORADOACAO, decreasing=TRUE) ,]

NA ROTINA ABAIXO VC MANTEM AS DUPLICADAS E MANTEM SOMENTE A DE MAIOR FREQUÊNCIA
dc_0_10<- d_cad0_10[!duplicated(d_cad0_10$NUMEROGENTE),]


USEI ESSA ROTINA EM UM BANCO DE DOADORES AQUI DE MANAUS PARA MANTER SOMENTE SOMENTE ELE UMA VEZ, E COMO ORDENEI ELE MANTINHA O PRIMEIRO REGISTRO DOS DUPLICADOS E O PRIMEIRO ERA O DE MAIOR FREQUÊNCIA. ACHO QUE ERA ISSO.

TESTE ESSA.



[  ]'s
Prof. Edson Lira, Me
Estatístico
Manaus-Amazonas


Em quinta-feira, 8 de novembro de 2018 18:29:43 AMT, Fernando Souza por (R-br) <[hidden email]> escreveu:


Cara criei esse comando que aproxima bem do que você deseja,
Porém a última situaçao (Local=D) não estou conseguindo programar, veja se tem alguma idéia que possa complementar.

att

dados<-data.frame(Local=c('A','A','A','B','C','C','C','C','D','D'),Frequencia=c(2,2,1,3,5,5,5,5,3,4),Data=c("13/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015","10/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015"),qtde=c(500,700,700,400,300,400,400,900,550,500))
dados$Data <-as.Date(dados$Data,"%d/%m/%Y")
str(dados)
dados

# install.packages("plyr")
library(plyr)

arranjo<-function(x){
valido <- c()
for(i in 1:nrow(x)){
if(x[i,2]==max(x[,2])){
valido[i]<-1
if( x[i,3]>= max(x[,3]) & x[i,2]==max(x[,2])){

valido[i] <-1
}else{

valido[i] <- 0

}
if(x[i,4]>= max(x[,4])){
valido[i] <- 1
}else{

valido[i] <- 0
}
}else{
valido[i]=0
}
}
return(mutate(x,valido=valido))
}

ddply(dados,.(Local, Data),arranjo)




On Nov 7 2018, at 11:29 am, Yury Duarte por (R-br) <[hidden email]> wrote:

Olá Daniel!

Utilizei a abordagem que você sugeriu e criei dois laços para fazer a checagem.
Ainda não está exatamente como gostaria mas o filtro já está sendo feito da maneira que preciso.
Segue a estrutura utilizada. 

Obrigado!

Abraços

dados:
area_id dia mes  ano frequencia valor
a  15   12 2012         10     5
a  22   12 2012         15    10
a  15   12 2012         12    15
a  24   11 2013         15    20
b   8   12 2013         10     5
b  14   10 2012         12    10
c   7   11 2012         15     5
c  19   11 2013         12    10
c  19   10 2014         12    15
c  19   10 2013         15    20
d   5   10 2014         10     5
d  23   10 2014         10    10
d   5   12 2012         10    15
d   5   12 2012         15    20
d   5   12 2013         12    25
d   6   11 2014         12    30

estrutura:
#--------------------Remover Objetos do R--------------------#
rm(list = ls())
set.seed(29031989)

raiz = 'C:\\Users\\Desktop\\'
a = read.table(paste0(raiz, 'teste_classificacao_final.txt'), header = T, sep = '\t')
colunas = colnames(a)
locais = data.frame(unique(a$area_id))

for (i in 1:length(locais[,1])){
  #nome = paste0("area_", locais[i,1])
  #area = assign(nome, a[which(a$area_id==locais[i,1]),])
  area = a[which(a$area_id==locais[i,1]),]
  anos = data.frame(unique(area$ano))
  
  for (x in 1:length(anos[,1])) {
    area_ano = area[which(area$ano==anos[x,1]),]
    frequencia_max = max(area_ano$frequencia)
    valor_max = max(area_ano$valor)
    area_ano_freq = area_ano[which(area_ano$frequencia==frequencia_max),]
    area_ano_freq_val = area_ano_freq[which(area_ano_freq$frequencia==frequencia_max),]
    
    write.table(area_ano_freq_val, paste0(raiz, 'teste', '.txt'), sep = "\t", append = T, col.names = F, row.names = F)
    
  }
}

b = read.table(paste0(raiz, 'teste.txt'), header = F, sep = '\t')
colnames(b) = colunas

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em qua, 7 de nov de 2018 às 09:26, Daniel Guimarães Tiezzi por (R-br) <[hidden email]> escreveu:
Uma opção eh usar Uma estrutura de repetição para checar as variaveis e retornar o valor q deseja

Daniel

On Wed, 7 Nov 2018, 09:22 Yury Duarte por (R-br) <[hidden email] wrote:
Bom dia colegas listeiros,

Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos. 
Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento. 

aggregate(dados$local, by = list(dados$data), 'função')   

Desde já, agradeço pela ajuda de todos! 

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP


Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <[hidden email]> escreveu:
Dá uma olhada no aggregate


<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><[hidden email]> escreveu:</div>
Boa tarde colegas listeiros, como vão?

Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
localfrequenciadataquantidadevalido
A213/05/2015500,000
A213/05/2015700,001
A113/05/2015700,000
B313/05/2015400,001
C513/05/2015300,000
C510/05/2015400,000
C513/05/2016400,001
C513/05/2015900,001
D313/05/2015550,000
D413/05/2015500,001

Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada. 

Desde já, agradeço pela colaboração de todos!

Att

Yury Duarte
Engenheiro Agrônomo - ESALQ/USP
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.


--
###############################################################
##  Jônatan Dupont Tatsch
##  Professor do Departamento de Física
##  Centro de Ciências Exatas e Naturais (CCNE)
##  Universidade Federal de Santa Maria - UFSM
##  Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900
##  Telefone: +55(55)33012083
###############################################################
_______________________________________________
R-br mailing list
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.

_______________________________________________
R-br mailing list
[hidden email]
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.