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

Edson Lira edinhoestat em yahoo.com.br
Qui Nov 8 21:47:42 -02 2018


###################CONTAGEM DE DOADORES############################COM ESSA ROTINA ABAIXO, VC ORDENA DO MAIOR PARA O MAIOR AS DUAS VARIÁVEISd_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ÊNCIAdc_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.


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

    Em quinta-feira, 8 de novembro de 2018 18:29:43 AMT, Fernando Souza por (R-br) <r-br em listas.c3sl.ufpr.br> 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) <r-br em listas.c3sl.ufpr.br> 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 valora  15   12 2012         10     5a  22   12 2012         15    10a  15   12 2012         12    15a  24   11 2013         15    20b   8   12 2013         10     5b  14   10 2012         12    10c   7   11 2012         15     5c  19   11 2013         12    10c  19   10 2014         12    15c  19   10 2013         15    20d   5   10 2014         10     5d  23   10 2014         10    10d   5   12 2012         10    15d   5   12 2012         15    20d   5   12 2013         12    25d   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 DuarteEngenheiro Agrônomo - ESALQ/USP

Em qua, 7 de nov de 2018 às 09:26, Daniel Guimarães Tiezzi por (R-br) <r-br em listas.c3sl.ufpr.br> 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) <r-br em listas.c3sl.ufpr.br 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 DuarteEngenheiro Agrônomo - ESALQ/USP

Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <r-br em listas.c3sl.ufpr.br> escreveu:
Dá uma olhada no aggregate
Enviado do Yahoo Mail no Android

<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><r-br em listas.c3sl.ufpr.br> 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 DuarteEngenheiro Agrônomo - ESALQ/USP_______________________________________________R-br mailing listR-br em listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
_______________________________________________R-br mailing listR-br em listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________R-br mailing listR-br em listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________R-br mailing listR-br em listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________R-br mailing listR-br em listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia 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
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/20181108/773fad4e/attachment.html>


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